﻿// --------------------------------------------------------------------------------------------
// <copyright file="IncludeFixture.cs" company="Effort Team">
//     Copyright (C) 2011-2014 Effort Team
//
//     Permission is hereby granted, free of charge, to any person obtaining a copy
//     of this software and associated documentation files (the "Software"), to deal
//     in the Software without restriction, including without limitation the rights
//     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//     copies of the Software, and to permit persons to whom the Software is
//     furnished to do so, subject to the following conditions:
//
//     The above copyright notice and this permission notice shall be included in
//     all copies or substantial portions of the Software.
//
//     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//     THE SOFTWARE.
// </copyright>
// --------------------------------------------------------------------------------------------

namespace Effort.Test.Features
{
    using System.Data.Entity;
    using System.Linq;
    using Effort.Test.Data.Northwind;
    using Effort.Test.Internal.Queries;
    using NUnit.Framework;

    [TestFixture]
    public class IncludeFixture
    {
        private IQueryTester<NorthwindObjectContext> tester;

        [SetUp]
        public void Initialize()
        {
            this.tester = new NorthwindQueryTester();
        }

        [Test]
        public void OneToOneInclude()
        {
            string expected = "[{\"OrderID\":10248,\"CustomerID\":\"VINET\",\"EmployeeID\":5,\"OrderDate\":\"1996-07-04T00:00:00\",\"RequiredDate\":\"1996-08-01T00:00:00\",\"ShippedDate\":\"1996-07-16T00:00:00\",\"ShipVia\":3,\"Freight\":32.38,\"ShipName\":\"Vins et alcools Chevalier\",\"ShipAddress\":\"59 rue de l'Abbaye\",\"ShipCity\":\"Reims\",\"ShipRegion\":null,\"ShipPostalCode\":\"51100\",\"ShipCountry\":\"France\",\"CustomerID1\":\"VINET\",\"CompanyName\":\"Vins et alcools Chevalier\",\"ContactName\":\"Paul Henriot\",\"ContactTitle\":\"Accounting Manager\",\"Address\":\"59 rue de l'Abbaye\",\"City\":\"Reims\",\"Region\":null,\"PostalCode\":\"51100\",\"Country\":\"France\",\"Phone\":\"26.47.15.10\",\"Fax\":\"26.47.15.11\"}]";

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from order in context.Orders
                        .Include(o => o.Customer)
                    where order.OrderID == 10248
                    select order, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void MultipleOneToOneInclude()
        {
            string expected = "[{\"OrderID\":10248,\"CustomerID\":\"VINET\",\"EmployeeID\":5,\"OrderDate\":\"1996-07-04T00:00:00\",\"RequiredDate\":\"1996-08-01T00:00:00\",\"ShippedDate\":\"1996-07-16T00:00:00\",\"ShipVia\":3,\"Freight\":32.38,\"ShipName\":\"Vins et alcools Chevalier\",\"ShipAddress\":\"59 rue de l'Abbaye\",\"ShipCity\":\"Reims\",\"ShipRegion\":null,\"ShipPostalCode\":\"51100\",\"ShipCountry\":\"France\",\"CustomerID1\":\"VINET\",\"CompanyName\":\"Vins et alcools Chevalier\",\"ContactName\":\"Paul Henriot\",\"ContactTitle\":\"Accounting Manager\",\"Address\":\"59 rue de l'Abbaye\",\"City\":\"Reims\",\"Region\":null,\"PostalCode\":\"51100\",\"Country\":\"France\",\"Phone\":\"26.47.15.10\",\"Fax\":\"26.47.15.11\",\"EmployeeID1\":5,\"LastName\":\"Buchanan\",\"FirstName\":\"Steven\",\"Title\":\"Sales Manager\",\"TitleOfCourtesy\":\"Mr.\",\"BirthDate\":\"1955-03-04T00:00:00\",\"HireDate\":\"1993-10-17T00:00:00\",\"Address1\":\"14 Garrett Hill\",\"City1\":\"London\",\"Region1\":null,\"PostalCode1\":\"SW1 8JR\",\"Country1\":\"UK\",\"HomePhone\":\"(71) 555-4848\",\"Extension\":\"3453\",\"Photo\":\"FRwvAAIAAAANAA4AFAAhAP////9CaXRtYXAgSW1hZ2UAUGFpbnQuUGljdHVyZQABBQAAAgAAAAcAAABQQnJ1c2gAAAAAAAAAAAAgVAAAQk0gVAAAAAAAAHYAAAAoAAAAwAAAAN8AAAABAAQAAAAAAKBTAADODgAA2A4AAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAACgAAAAAAAAAAAAAA6QAAAADJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0ADAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACpAAAAAAAAAAAAAADKAAAADpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAAADAAAAAAAAAAJAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAKAAAAAAAAAAAAAAygAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAACQkAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAADKAADAAAAAAAAAAAAMAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAyQAAAAAAAAAAypAAAA6QkAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAArAAAAAAAAJAAAAoAAODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAMoAAAAAAAAAALAOkAywkAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADgAAAAAAAAAAAMoA8AANoAAAAAAAAAAAysqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJygAAAAAAAAAAwAAAAKkMqckJAAAAkADAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAwLAAAAAADKAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAADKCQCQAAAAAAAOkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAMkAAAAAAAAAAAAAAAAMAA2gkAAAAAAADJzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAADAygAAAADLDQAAAAAAAAAOqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAKAAAAAAwAAMAADA0AwPCcsLCQAAAAAAAN4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAADKnp8LDwucvLDQAAAAAAAAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAy5wNCpya3LmtCwkAAAAAAAAO+pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwKkAAAAAAKAAAAAODekMua2csNsPDbyQAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAALAAAAAAAADAAAAAycqQ+a0Nqa2a2Q8AvLCQAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmgAAAAAAsACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkADg8L3LD5qanJC8mtD5yQkAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAyQ2tCw0MnJy8vJqcucsOkAAAAAAAAA4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALALAAAAAKAAkAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAoLDpqa0PC5qakJCa35nLyZypAAAAAAAMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAoAAAAAAAAKAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACQAAAADAAAAAAAwMsNDZqZwNDZ6enJAPy9vpnAkAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQwAkAAAAAAACQAAwAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAwJAAAAAAAAAMAADAkJDamsnKmwsAkJCw+QvA2emwAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAJqQCgCQoAAAAAAKCgAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODgAAAAAAAAAMAAra2pDbmp0MkPng8NkPDb+trJAAAAAAAAygAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAANoAAAAKCgsAkAAAAAAKAADpAAAAAAAAAAAAAAAAAAAAAACssACQAAAAAADAAArQkAkNqcDQC56QCZCw6Q28Db28kAAAAAANrQAAAAAAAAAAAAAAAAAAAAAAAMCgAAAMsAkAAMDwkAAKAAAAqQAAmgAKkAAAAAAAAAAAAAAAAAAAAAyQAAAAAAAAAAAAypAAra2py5qbwAkLAOkNnryfntrbCQAAAADKygAAAAAAAAAAAAAAAAAAAACQoLAACw2gAKAA7LoAoKAJAAAAAAoAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAACQ0JCQsMkAmpDA0JDwqcmsua288AAAAAAADQAAAAAAAAAAAAAAAACgsMsMAACQAAAACQ0A/wyekJCgAAAAAAAAAADLAAAJAAAAAAAAAAAAAAAAAMsAAADJAAAAAAAAkMvLC8vJybAPDQC5Ca0AnJvJ/NvpsJAAAAAO2gAAAAAAAAAAAAAACtrJAJAAkACssAAJDgCgDr6grKkAAACgCgCaAAAOkAAOsAAAAAAAAAAAAAAAAAAAAAAAAAAACQDgCQAJyQmpoAyQmp0ArQCfC8CtqbyfywAAAAAAAAAAAAAAAAAAAAAO/fva2gCgCakAAAmgCakAAMnvmsoAAKkAkAAAAAAKywAA8AAAAAAAAAAAAAAADKAAAAAAAADgAOkACp8LDwDQnamskAqdCp4A0L2a3p/p/JAAAAAAwAAAAAAAAAAACe///rywCQCQoACQCaAAAAwAAK7w4JAACgAKAAoAAAAMsAAAywAAAAAAAAAAAAAAAJAAAAAAAAAJ4AAJCcCckJoJypyQD5DKnAmfDwDtCeDby7AAAAAMoAAAAAAAAADO/v//+98NoAAAkMCgAACQ4JoAAA3ryaALAACpCgAAAAAP6QAAqQAAAAAAAAAAAAAAAAAAAAAAkAAACQ8LywsLCa2aCQkLkAqZCQ8ACa2anp+e3pAAAADKkAAAAAAAAM/////v3voLCQ6QALAJCpAAkACQAAoOsAoAmpAAAJAAAAAA/wAADgAAAAAAAAAAAAAAygAAAAAKCangAADQkJyQvJAMmtqcrQkAD5Dp8NoNrQ+tvekAAAAMAAAAAAAAzv//////v5/QCpAKAAAADACgAJ4AAAAAAA2uAAoKmgAAAAAOy8kAALAAAAAAAAAAAAAAkJAAAAAMDAAA8JsLDaCcCwmpAJAJALyfAAkACw2p2tDw6fAAAAAAAAAAAADP/////////vC8kAAJCQDwkACQCgkACQAACg4JrKCQAAAAAAAA/7AAAMsAAAAAAAAAAAAODgAAAAAJoAAJCekJyQmpANCQ+Q6aCQkAkLyZDJqcvLzb/akAAAAOAAAAz+////////7//5+poJqcCgAAoJAAnAoAAKCaAPqayQsKAAAAAAAO/poAAKAKAAAAAAAAAADAkAAAAAAACQranpDampyQ+QrJAAkMkJoJrQAOCenLy8sO2tsAAADAAAz////+///////+36wNCQAAAJAJAKDKAA0AAAAAAADP/qwAkAAAAAAA//kAAAkACgAAAAAAAACtqQAAAAAOAAkJCZqQkJCpCpmwCwCQAMCcAJqQkA8PCe357fwAAAAADv//////////7///v9uwoAAAsACgCQAJCwoKAACgAACsrbCgoAAJAAAMD/6wAAoAAAAAAAAAAAAMDgAAAAAJANqcvJyayakMkMAJAJCpCwmpC8AJDwCQ8JoPmpsAAADgz////////v///////rydANqQAAkAoAkAAAkACgCQAAAA8OCQAAAKAAAA/v+QCwAAAAAAAAAAAADKkAAAAAAAC5CbCakJkMkLCakPCQyQAAAAAAmsAJ4PD8/a38+QAADQ//////////////79+f+gsAAAkPAJyQAKDQ4ACQCgAACgAKmgAAAAAAAM7/6aAAAKkAAAAAAAAAywAAAAAACsvQ8MkJmpCpAJAJAAAKkACQkAkAAAraCQ0Lmp6ekAAAyu///////+///////+vvANCaCaAAAAAAoJAKkAoAAJAAkAoAAAAACQAAAA/9sAAAAAoAAAAAAAAAAPAAAAAACZC5m5C8DayQsMC8kJCQAJAAAACQkJAA0Ont7enp8AAADP/////////////////b+aAAAAkACQoAkACQAAAAoKAAAAkAAMAADgkAAA4LAAoJoNCwAAAAAAAArA8AAAAAytvLwLyZoJkACakJCaAJAACQCQAAAAAAqQsAsPy8+wAAz/////////////////+trQsJCcoJoJCQAAoJ4AkKCQAACgoAAAqQAAoAAAsACwAAAAoAAAAAAAAA3pAAAAAMm5CZmQmgkKCQkJAKAAkACQAAAAAAAAkADAye3p8PCQAA7///////////////77//sLAMoACQAAAKDanACQoAAAqaAAAAAKkACwAAAAAAAAAAAAAAAAAAAAAM6aAAAADpvQ+aDprZDQkLwACQkJAJAAAAAAAAAAAJCamtCa6enpAM//////////7//////+25y8kAkJAACaAJAAAAsAAJCgwAAAsAAACgANCaAKAKAADrAKDrAAAAAAAMvAnAAAmfCbnJmQkAmpAAkLAAAAAAAAAAAAAAAAAAAAwKD9np6QAO///////////////////vqQCwAKkLAAkAkACwwAoKAJqakAAKAAAAAKAAAJAAAMrwsAz/+QAAAAAKy+AAAA6Z+cuempCakA8JoAkJAAkAAAkAAAAAAAAAAAANoK0PnpDO//////////////////v9vLAAkAAAyQDgCpAAsAkAAKAAAKAJAAmg6QmgsAoJDr6QAA//+wAAAADA8JAAAPm/m5kJDQsNCZCQCQAAAAAAkAAAAAAAAAAACQCQDQrQ7aD////////////////////a2wCaAMmpCgkJAAwJAAoJCgAAAAmgAA4PmsoAAAAAoAkAAO////AAAAAP6eAAnbnp2trampyQsAAAkAkAkJAAAAAAAAAAAAAAAAAMALyemw3v/////////+///////vvr8MsAkLAAAJoAAAC8AAAKCQkKAKDAoADw7L2toKkACwAKDP////+wAADg8AkAyv29uZkJyQmpAJCwAAAAAAAAAAAAAAAAAAAAAAAJrADp7P7///////////////////+8mwwAAAAAkAAAkLAAsAsACgoAAACpAAAAsMoAkACgAAoAD///////+QAMD6AAn5+by9qakLCQ2wAJCQkAAACQCQAAAAAAAAAAAAAACcCakJ////////////////////376bkJqQCaCwCQoAkAAAALAAAAAJAA6QCgAKngrAoJoJAA7////////wAK8JAA+fv5uanQkNALAAkAAAoJCQkAAAAAAACQkAAAAAAAAKnA2sz///////////////////v8vACgAKkADAsAkAygkACgAKkAAKCgCgDJCpypALAAAAAP/////////7AMkAAP/72fCdmpCwuQkJAJAJCaAAAAAAAAkAAAAAAJAAAOCQwLAPv////////////////////L0LCQkNAJCQwAAKCQoKCQCQAKAAALDaAKwAre+gngsA7///////////kMoADPn5+58Lya0JwAkKkAkAAAkJAAkACQAJAJqQkAqQCQwAsMrQz///////////7///////v7qQAAoACgCgCaCQAJAJ4AoAqQCQAAoAAAsAAA7fAADv////////////+w0ACf/729vZsJCwmwCQCaCQkAAACQCQAJwAkAANqQAJAJqcCQALDP/////////////////v3trbywkLCQkJAJAJCgAKkLAKAAoAoACakADKmpCqD////////////////5oADvv9vbCa2ekJAJAJAAkAAJCQsAkA2gkJDQkAAJCcnAnKnprQ2v/////////////////7/72gkMAAAAoAoACgAJAJygAAmg0AALCsoACpwArJy+////7//////////7wJD//bvL29CpCQCQqQkJAJCQoJAJAJAJqQmp6Qma0LCpypwAwAre//////////////////+8vJoAsJCwkJCQkMkAqaCeCaAACpAMAJwAAOC8mgrL3//7////////////vAD/+/25CamQmssMkKAAkKAJCemQqakMkLyQkLDJCQ2eCcvLC8kN///////////////////bCwCQAKAAygAKAAoJAJ4J4AoKnAsAoKCwAJ4KDQ8K6++8//////////+pCwz//5vfvZ6ZCQCQCQkLyQkPCQrZDQm5rQvL0NsNsPC5/py80Lyg//////////7///////vv8JoJCQnJCQCQCQAAAMkOmpCQCpwLCQAACgDw2gANAMsO///////5+pAADAv/2/25ywkOkAkKkJAACQmpD5kK2p6cmfm9CwybDQ/enevamskN7////////////////6/bDakKAACgAKkACgkKkJCpoACgDQqQwKCaAA4Oqcv6vLCwnpytCpAKAAAAALz/v9u9uZ6ZC5CQkA+Qmg8NsJy9mckL2pDQvQmw2/nL3r3svJraD/////////////////262wwJCakJqQAAkAAAAKnAyaAKCgnpqQoAkJANCgwN6wwAoAsKkAAACQAJAAz//b/anpkKkAqQAJAPCZC5y8ua2pvQnb29mtvLDQ+8/9rby8kNrP////////////////v9oAmgDAAAANCaAJqQkMqQrJCQkOAMDpAAoKAK/LDg+aD/ywAACpqQAAz6kAz/v729uQ6QkNAJCwkAng0KmbyZrZC9qQkLyQ2dmtDQ8P2t8Lywms///////+////////+v2wCQmpCwkAoAkAAOAAkKkKCgAJCwsAsKAACtCeCaAM////vLAADKmsuQAAD//9+9vLmcCwkKnJC5qZqdvJuemw+bnb29vbmp6Z+fn/rfD9ra0J7//////////////+35rakKAAAAoJCQCgkJAJ4NCgkACg4JwPDJCaAAr+mskP////////+50NoAAAD/vbvbCZAKkJCQkAsMnanbCfnJCdkNmprbybyfmenp7a3w/wvJCen///////////////v60JAAkAkJCQAKDQCgCwkKDQoKkAnKmgCw4AmpwL6QoMvv////////C++QAAz///2528sJCQoJCpyZsNsJ8JC5+a25+dkJsNn575+fn56f6e2w8JrP//////////////+fCwrQqaCgAAsJAJCQkA6QCtAACgoNCQwLDwDKDA/v2gCa2v////raDP/5AAD7+fvakJCQ2pnAmQsPCwnwvb0JD5kPmp+Q2wsNnr0Py8vQ357bng2a/////////////7/p8NAJAJCcmgAAAKAOAAkOkAqeAMCwoMqcALy8v/////vAAADLC8mpz//wAAD///29vLDwCQCbDJCQnbyZCQm9ua25DZCfANDamZD5n52v8PkPyfCs3/////7///////+/CwsACQAAoJyakJCQmp4JCg0AmgsMkKnKn8vL/+////////68/p6ev/2pAAz/vbmpCQkAuQsACw8Lywuemp8LCdmcmpCQCQCw2e296fy9D9DwmwDZ7/////////////DwvJAKmgqQkAoAAKwKCQkK0JqaDQyaC8oNoJ797//////////////7z/vaAAD/+/2Q8LAJDJCQkJCZkJ0JnQnZ2wsLkA8AmpDQsJvJvLvL+a8Pra2gnv//////////////kKCQAJwKCQkJCQkNAMqQCsANoLDJwJyw2smv/////////////73/nP/5kAD/37vJCQkAkKnLDanpram8sLC5CdnQ2QCQAMmpyem8vdvQ/NvQkJDanP////////////+96doJwAkJAKAAoACgsKkOkJqQDQmgsPAPra/P7//////////////56//wAAz7+9uakPCaCQkAkJCQ2Q0JnZ2cuakJoJAAkJAMsJDb2vD/n62p6em88J7///////////nrmgCaCwoAqQkJCaCQAJwJCgwOmg4NDgDw0PD////////////////r3/8LAAD/37nA2pCQ2wmpC5CampqempqbnJmpCQkJAAAJCQ2trZ/58NuenJrJC8/////////////56QkAkACQkACgDAkA8AvKDQsJDJCaCQ8A+t7///////////////vfmsuQAAz/+fCbCQkLAACQ0KANCcmZnZnAm9CckAAMkJCQDwvJ3/2en/npCw2enLz//////////78LDwCwAJAKDakJqQDpCQCQCpwKCw4NrLDwDw/v/////////////9/++975AAD/v58JvLDQmbwLCQ0KkLDgsNuZyQsJC5CQqQkPkND6kPr9+a2enLCp6cvv////////////kLAJ4KkNAAAAALAAoJ4K0AqcnAkKCcAPCe////////////////rb0LCQAA7//am8mZmpoAmQkJCQkJmZ2bCQufnbkA0JnL2pD5+d/5/b3tsJCw2enr0P//////////+9rwCQCQCgCwmgkACa0AAJCekKCay8nLDw/v////////////////+enpwAAA37m5nJDwrZDQmgmgmp6ekPCw2byQmpy9uby5Db356fvP28u5C8vLDpy9D///////////vPkAvKkKkAkAAJoAngAOkMoADJrJALCg8A+e/////////////////72gmgAA7/+cqakJkAkJANAJyQkJqZnZvJvb2fmQnJnJ+csNve2/D/na0J8Mmbytre//////////+6npCQCQCQqQsACaAJqZCwnJoMkOnA0JDwDt/////////////////8vbAJAA37272Z+emwkLkLCakLCQnKmwm9CZqZ6dudqfD52+29/f+f6ZDwn56tvLy5///////////9qaAJCpypAMCaAJAAwA4ACgCaCpCpoPAPD77///////////////+/8PCQAA7/kNqekJnJCwyQkJCdC8m50NvL29nbmanLnQkNrZ/Pren5nakNrana29vP7/////////8PnJCwqQCQCakAnAqakAkJrQ8AyQ6cDwDw/e///////////////////5AAAM/5rb2ZC9qbDQmwnpCwCQsJCamZCby5AJCQAAkJCcrfn58Lyp2pvb2trLyw//////////n7CwvAkAsAsAAJCgnACwrAAAALDpALAOkPDv////////////////+9vekAAA/72pra2a0JsLAJCa0JsJCcuZ2tvJkJCQAAmQAAAAkJwADQmQCQ2py8n9vPCe/////////trQCQDwCwywkKCQALwNCa2prAkOnA8J4A+e//////////////////6/+QAA/73525rZvQ0JvLCQsNAA2wDwmQCQAAAJCcCtC8kJwKkJAAAJoPn6mfDw+fD57///////+/mpoLAJAJAAqQAJqQsAoAAAyawJCpAOmfDv//////////////////memgkM+8ufsNm8mpucmQ2pnam5AJkJAAkAkNCcnJmZCQCamcnpqQAADQCdDw8Pnp8P3///////v56cCQCwCakJDAsADAAAnJDwmgCw6cDwng7//////////////////57wkJAA+dvanbvJudCpoJqcmpAACQAAAJCbCwkJqbDw+fn9npva0LCQ2wvw8Pn57bz//////////LCQsKkAsACgmpDLCwngoKAAANDJAKkLwPnv//////////////////sL6QuQCv+fm8mb0LnQm8mamQmQkACQm8sJ2b29nQkJkJ6a+fy9sNDa0Jybna2t+tvP3///////v72pDQCwypDQAAkAAKCdCcmp4Kmg8MDgsOnv///////////////////Zn9CZyby9rb2tvQuZ6Z6Z6QAAAAAJyZDwvJCamp6Q6QnZz58P2wqQvwntr5/a3w+f////////+traCpDJCQoJqQqQkNoAoADACQDJALCcDw7///////////////////+/m5uQn9vb2wv5sLwLkLkLkJDQqQngsPmZmbnJDQkJALy8va38sNne0J6b2entvtvL3////////bsJyQqampCaAKkKwAkAnJqQsMqaDwzp6a3///////////////////+9vb0Jz729rb2fy9m9D5D5CQqQnACZDQmtCtCwkAAAnQnL2tvLnprLmwme2vn57by9v///////v7yamgkAAAoJANAAmprACgygwJANAJqaDenv///////////////////b25mwvbnr29vpsJqamekJywkJCakAmpCQ2QkJAJCQCtra2ey96dm9DJ75vQ2v2+3p/9///////LrQCbCp6Q0AmgCaAACfCQkJoK2gvA0NoK3+/////////////////7+5+fmZ//vbnp+fn50NqZubkJDakJCa0L2pCemakAAJCQkNrb2p2g/LkJkPD7/QvL+en///////+9urAMnAkKC8CQoJCcoADgrADQANCaCg0PDv//////////////////nbn5+c+9+9qfD58LC5nw0JCQAJyQnpCQmQsJANCQkADJ6a0NrfDZCQCQ+Z+cnv39D9/5////////DQmwqaCwkAsAnAoKkAqQkJoA6aDg0PDw+9/////////////////725+fufvfvb35+fvZ+csJufmgkAsKkJCw2tCZCwCQCQ2wkNy8vQucqQvLnPrb+9ra/w+f7/////sLmp4AkAnACpALAKnJAJwAyg0JANCaDwDw3v////////////////+dvb2529/728ub2vmpC5nw0JCZCQCdCQnJCQkA0JAMkAANDwva0LypkMkMm5280P29rfsN///////8vQnLC8qakKnACQAA8KkLCQoOmg4NAPC+D+////////////////up+fvbm9+/+fnw+d+fnLCbmwkA8JAACeCakLDbCQmpCQkKkNy9rdnamQm5yen7/b7/28/w3/////+/C6CQAJAJDQqQCpCwAAAMCskJDJCaywwNrb////////////////nZkNm9vf/9v58Pn7n5uZ+Q0NuZCQCQsJkNCQkAkJCQkJCdDwvQ2wsJypDQudvN+8+cvvkJ//////v9vJCp6aCwoJAKkAwAsA8KkJAOCwDgkOn63v///////////////5sLD7v5m//7+en5+w+a2en5m5DKkAkAnJCwn5CZCQ0JC9Dw+ZwP8PnQmckLza377fn7/Z+97//////LoJrQkA0MCaCQAKkLyQCQCssJAPCcrQoNre////////////////mQnb2b////n5+fvfn5vbma0LmZCZCwCanJAAkACam50LmdntuQmQkLAJqdm9v9+f/PD6353/////+9nwCwqbCwsJypCQAAAJoJyQDK0AngmtDw+v///////////////7kJCfvZDf//+fnw2/+fC9rZucmp0AkJAAkJmQkJnJDanZ6a2/2tD56QkA2p6f2f/w/5/bD7/////7++sLAJwAAJDKkA4JDwsAyQoMsJCtoJ4K2tDe///////////////5Db25CQ2//5/w+fvbn725+b2bnZqbCQkJCwALDa25+dsPn/39/fuQkJD5Cdnw//n9+e2t/5z//////5vJywsPCwsJCQkKAAAAsOkLAKyQCekNqevv//////////////+525CQkLD///+f2/29/5+fm9sNmpmckMkJCQ2525vb27nb29v//70NqQmQ3wvf/9//vtv5+dv/////+bypqQCQnAAAoKAAkJrQAJwAnJDg8AraDbz///////////////+QmZkJCQ3///v5vfv/mfn5vQ272fCQmZCwAJCdvZ+dud+9vf/f/9+5kNrLuf29//39/b3p773/////v+uQAOmgoLDwkJCwygAJ4AqaCgkACekNrg8P//////////////+5y8sJCQn///3/+9+f+9+fm7nZsJ29qakJ2Qmpm9n725nb29//3/+Q2pmdDa3/3/+/+9vbn9D/////6by9uQCckAkArAAJCcsACQnJycoPDgnq0PD///////////////+ZuZmQkJ////v5/b/5/b/bndu9n5qZnQnQoJydvQvZ+fm9vb3//9vamcvL29v9///97f7w37n/////v/mgDLmpqeCpCQsAoAAAmsCgoLDQAJ4JDw/+//////////////ucnbkAkPn////f+9+fm/m9+bnZudm8mpmpmbCam52/n5va39/9vb0JDbn5+f3///3/v9udv5z//////wvJCwAAAJCQmgAAkJC6wLCckMCpDwDw8PD///////////////mZ+5CZANvf//+9vb/7/5/bn5+b2a2bmckJDQmdDbnJ+fmduf///tvb8P29vP/f3//f2/3r37nf////+fCa0K2p6aCgwAngAOAJCcCgCwCeAPAPDw/v/////////////7+Qnb0JkPv///////n5/bn9ufn5vZvZ6bnbmpy5ucufn5+b39/f29rZ258P29+//fv//a+en/vP///7/68JqQCQAJyQqQCQsAkAoAkJrA8JDwnsqen///////////////mZ+5CQCcvf/////5/5+9+b35+b2b2amcmp2Zucnbnb2529uf/7//2+ve29vb39//39//35/5mf////8PnLAPmpqQoAkKAAAJoA0LysAJAMoA4Lnp7+/////////////7mtvZuQkP/////5+f+f+fm9ubm9n5C525udqenb25+9ufuZ39/f39v535vb39//+9//vZ8P/7D9////v7Cw6QAMkKkLAAkAmgAAoACQsKyw2tDQ4PD//////////////52Z+9mpCQ///////9vbn5vZvdvbsNvbnQ2pmZC5vZyZ/Z2/vf/////f+fy96fvb3/39/+v9/9mf/////w8JALCwqcAAAACgCckJDaAAyQkKCamtrQ/P/////////////7kPn7nQkAm/////+//9uf29ub2dm5mcubnby9nZy7n7m/nZ+f29//n9rb+fnw3/+f/729nv/72t////+fDwucAJALDwCwkAwAoAoA0LAMrJysDamtr//////////////5mZ29ubkJz//////9ub35vp29ubnb25nQmwmQsLnZ+dvZu9n9//+f/729n5vb+fn/n/7//f//mf////D7qQwLDwqQAAkAAJCpAA0JCsCwCQqQ+p7a3v////////////+Z6fv72ZCan//////b/9ub2ZuZnw2wmby5+Z+fnZ+b2b2/nZ+f/9/92tvfrQ8Pn9/9/9/a2v/5nt/////wnLCwkAnJCwAAAKAAAAoOkJDLCtDLANCt7/////////////+5mZ29v5+Zyf//////+b29vb29ubmdrZnZDwkJC5nwu9vZ+b3/372/vb8J29n5y+n///v//5//Cf////vfqQkAywoKAACgkACQkJCQDKkA0KmsvK8LD//////////////5npn72/m/n/////+9/5+b25na2duZmpsLmfm9va2dnan5vZvf/f/e29nwsKkPvf+f39/b3/+fkJ////+tqw6aANCQkJAAAJAMoAwLCwCpqcDJy8D8/v////////////+5CZ+dudvZud//////v9udufC5mwnLmdCdCwnJkJm5vZ+fmf3///n5vakJydrZz73/v///8Pz5+Q////v70MkJCwoOCgCQCgCgAAsAwJyQwKCwsNsPr/////////////+dkPn7/bufD7/////b/bvbDZvZ+dm5ywuanJCbD5vL2bmfn5v/nw+p0A0LCakK288N/bz5AJ+wkP7////pC5oOAJCQnAAAAACQkACwkKDprQ0OnqDw/f////////////+7mQmfm5358JAA////+/29m9CwkLDakJDJCQsMmcmZufn5ud/f+9mQCZrQnJ6drfn7////sO3/kJ////n54ACQsKwAAJAJAJAAAJDArQkACpqQye2trv/////////////5Ca2b25ubnwkAD/+9/b+b0LmduQkJCckJoJyQALCekJ+f25//37y9oJAJqQkL2t7en9+fyQ//+Q3//7/rnp4JyQmpoAoAAAAOAA8JAAoNDQwPoJDw3///////////////mdmtvb372QAJ3///u/n7m5yaDbCQmpCQCQkLCQnJn5n5vb3/+ZkAkACQkLy9rb298P//sOn///////+byQkKAAoACQAAAAqQkAAArLyaCgmpDa6evv/////////////7kJCQkPm5mgvL7///39vZycuZmQmtCQqQkAAAkAkLCb+b29/5sPAJCQkJ6cnK28vtrfvPDZC///////v8qaCpC8kNAACQAJAAAJCwkAAJDayey8ms////////////////mQkL25+fANAA3///+7m7m5C8mpCakJkNCQkJCaCQ+cm9vb3/2QCQAAAAAJqdD7ya2v3/sO/b3/////2psMkAwKAAoJAAAAAKAKwMqQsOAJoJoPD5qe//////////////+5vdvbmQkA8PD/n7/b2ckAmbDb0J2g0JALAAAJAJC5+fn5/7+5rbkNC9m8kKkNvZDevt+e///////7/w8LDakJCwkKAAkAAAkAmpDAwJC8Daya0O3v////////////////27m58AAJAA////+9upuQAMmwmwCZoLDQkJCckAkJvb29/fkNkACQkAAADw3pygy9/fsM////////6/CQCgCsAAwAkAAKDQAAAAsLCawAmsmtCvD/////////////////udvZAAAKAPn//5/bnZ0JAJsNkAkACQkJCQAJqZ6f25+f/7yaCQkKAAAAANqaCQvPvvwP////////nwkOkNCQsJqQAAAJAAoJqcAAoJrayQvA+Q8P/////////////////7kACQAMkM////+9CwuQkACQqQAAAMqQAAkAkAkJufvb35sNsAAAkAAADK0JAAy83/ue////////+tqQCgoADAAMCpAAAAkAwLDQnAAJraywDgnp7/////////////////CQAACQAA/////72fC9CQAAkAAAAA3rkACQCQvQ/Z29//mwCQCQAAAACssAwJz76f8M////////vbypCQ2pCwCpAAAAAAAAsACg4Ly8AAkPCQ6e/////////////////5AAAAAADw//+fn7mpnJsJAAAAAAANqQAJAAkKybm7+fvfnJAAkAAAAAAJAAkMvQ3vAP///////73rCQ4AAAoAkACQCQCwAAAK0JCQAJrLDgkOkPrf///////////////7AAkAAAAA/////5+dC7DQAJAAAAAAAACQCQAJma39n/37CaCQAAkAAAAAAJDp/L8PkM////////+wnKkLCckMoAoAAAAA4JyQAKAOmskMkJ4JrQ/+///////////////5AAAAAAnJ7//73/kLkNmwkAkAAAAAAJAAAAkJ6fm7+fv9vZAJAAAACQAAmsvfDwz9qe///////7y9qQAMAKAJAAkAoAAAkACpDQkACQqQrAmsCtD////////////////5AAAAAAAKn//9+/vQ8Ly9vQAAkAAAkAALAJAJCQ+dn5+fmp0KmQCQAA0MCZ77+fDvkM/////////a2pywsJAKDQAJAACQAAsMoKypDg0LyawJDa2t///////////////7AAkAkAAAz//7/f+5CQkJCbmdoJCaDJqQCaCaC9n7/b/56QqQyp0AkJqb8P28ng35oM////////vpAAAAAMqQAKAAAJCgAAwAkJCcAJoAAACayg/////////////////5AAAAAAkA//+9/72csMsPnpywmbDQmwkAkAkJ0JrZ29+bmQkJCQoJra2tDanp4N6+kA///////76Q6akNCpDAAJAAAADAsJCwCsAKmgDwmtoJCfrf///////////////5AAAAAAAAD/////+5AJCQCakLy8sLAJCQCQCQD5+6+bnw8PAAAJCQkJCQsNAACa35AM7///////vbAMoKkAAAsAAJAAAAAAAJCQvJDQAKwAkOAM+v///////////////7AAAAAAypDP//v///mwCpAJAJCQkJCQAJAJAJoJDZn56fmQmakAAAAAAAAAkNrJ7vAA///////9+tsAkADLCwAAoAAACQAAsMoAAAoK0JCwDJD63////////////////5AAAJAAkAD////f+fnJCQCQCQAAAAAAAAAAC8nb2p6en9vbDQCQAAAAAAAAoACe35AA7///////raDaDAsAAADQkACQoAAAAAnJCwnJAKwMqa2tv////////////////7AAAAAAAA6f//////uQ0AAAAAAAAAAAAJCckJCwmfm9vbC8mpnAkAAAAAyQya3t+wAA///////7/akJCpAJDJCgAAAAAKkJywCgDAoArQmpAMvv7////////////////5AAAAAAAJAP//+///n7CZCakAkJAAAAkMCwvL2frQ/b2tvZ+fC5CckJAJAPD8///5AA7///////mpyg0ADgoKAAAAAAkAAAAJCcsJywCgwKnpyf/////////////////5AAAAAAAAkA//////+fmtnJCQCgCQkACbyfmQvJ25vL+by/np8Pnr6cvK2t/////6kA3///////7akAoJCQCQCQsJAAAAAAkOAKAAAMnJqcAOr+/////////////////5AAAAAACawL3/////+9vbCw8L2QnLCfnp+8vb2/vP2/39vb+b+f+fn729//////+QAA7///////v5ywkMoAwAoAAAAAAAkAoJCQCekLCgDAvL3/////////////////+wAAAAAADAkND//7///b3729m8kPm8vb29ufm9rb29v5ub29/f3/n//f///f////3pAM///////7yaAACpAAsA0AAAAACaAAkAoNoA4A0PCwy86//////////////////5AAAAAACakKn/////+/u9vb+b+by5v56fn57b29v5+f/f+/v7+f/5///9/////7+wAA////////+tDw0ACwCaAMkACQAAAADJwAkJCaAAAJrL3v////////////////+wAAAAAAAMCcqb/9v//9+fm9vdv9vf2tvby5vb+f2/n5+5/f29/9vfn////////9/7AA7//////72rAAqQwAwACQoJAAAAAAsACwwKAMmp6eCer//////////////////5AAAAAAkJoJD9/////7+9v5+72725vbm9vb29+fvf//n/n5//vb/7//3///////+ckM////////+csJAKkLAJCgAAAAAAkAALAAqQ2prAAAnp3+////////////////+wAAAAAAAKyQ/L+f/f+fnb+fn9uduf25/b29+fn73729v5+/+f3/n9/f///////fvLAA//////++vLAMrJAAAOAAkAAACwAAkAnJDAAMkJ6eAOrf/////////////////5AJAAAAAAngmt//v//5+/n5+b2/n5vfm5rbn735+9vb2/n5/7+f/7+////////+29AM///////9ucsAkAoMsJCQAACQAAAArACgCwsADgAJ6drv/////////////////5AAAAAAANCcCa29///72fn5v9vZ+fm9+f29vb+fn5+9vZ+f29/9v9/f/////////60AD///////6wyaAAkAAACgCpAAAAAACakJAAwLCQ8AAOna/////////////////wAAAAAJAAALD5//vb+fu5+fm72/m5/bnbn5+fn7y/n72/vbvfvb+fv////////f/7AA7//////7+csMkLwLAKwJAAAAAAkAkAAA6QqcDgAK2trv/////////////////5AAAAAACwDw2en73//7ndv5/fm9vfm5+5+fn5/529+fn52/372/3//f/////////QkA///////9vLAJoAAAyQkAAAAACQAAygywANAKkJrQDa2//////////////////5AAAAAADACQrb+f+/n5+72fm5/bm5+fmfn5vb+fv5v5+fvZ+9v5+9v/3/////////AAz/////+/DwmgyQsJoAoAAAkACgAKkJAAkKnACsCp4K7e/////////////////7kA4AAAAJ4Ly8n5/f+/nbvb/bm9/b25/5+f2929n/nb29v72/373/2//////////w8ADr//////8LyQoAwACQALAAAAAAAAAACQoACpyQnACcnv/////////////////5AAkAAACQCcn7/7+/n5+9n5uf+bm9vb+fn5vbvb+f+9vb29vbv9u9v9/////////5AAre//////m8oAkOCawMkACQAAkAkACwDgyQ0AoOCg8Pr//////////////////7AAAACQDgnp69+f39+/nbub35m9vbm535+b272fn5ufn5+b29/b/f+f/////////gAA3/////+8vJCeAJAAkKAAAAAAAAAADJCQAKCw0JDQAJ3v/////////////////7AAwAAACekL37/7+/vZ+539uf+f25+fm5vb+fv5+/372/n9vbm9v5//////////+ZAA757////78LAAsAsAoJDpAAAAAAALAKAAsADAoOCtrKD+//////////////////sADQAAAA8Nrfn9/f+/n7m5+5+bn5+5+fn5n729vb+fvb+fvf+f2/n9/////////wAADv3////58NqQwAwJAAAAqQAJAJAACQwJANCQkJCQCfD///////////////////kACgAADLDw+/+/v735+fvfn5vb/bmfn5+fvb+fnb29v9n72/n5/9//////////8LAAz77///+++wDKkLAKyakAAAAAAAoAAAmgAKCg4A4Ong7///////////////////kAAJAAAADb/fn9/f+/n525vb2/mb37m5+b29n72/vfvb/5/5//+fn/////////uQANv57/////kMsJAAAJAAAAAAAAAAAJCwAA8JDQkJCQAP3v//////////////////sAAAAAANC8+/+/v/vZ+fvb2/vZ+9ud+fm9vbvb/535+9vfm/n5///f////////wAAA7w3///vw+wCgCtCgCgCpAJAAAAkAwADQAAoAoODp4K////////////////////+QAAAAkKnL35/9+9+/n5+9vZ+/n5+7n5/b29+dm/ufn72//f//29v////////9uQAADL7/////D50JAADQkA0AAAAAkAAAAJoACw0NDQkADc7///////////////////8AnAAAAAAA//+///vb+fnb2/n5+fn5+fm9vZv7/b37/b/b2/n5///f///////7AAAA/w/////58KAMqQoArJAAAAAAAAAAmgAJDAAKAKAOnr////////////////////uQAAAAAAntvb/f/72/n5+/v5vbn5+fm9v56f+fm9vb2/2//b/b+f3////////QAAAP6fz///+e8NqQDAkAkKALAAAAAJAAAAnAsAqQsJ6QDt7///////////////////8AoAAAAACan9v9vf/5+fvZ+f29vbn5vb+fn6n5/5+9+9v9v9+9/7////////+wAADA/r/////7mwCgmgCsAAkACQAAAAAADQCgAJwMDAAPCa////////////////////+5CQAAAAAAy62/+9vfv5+/n7n72/m9+9n5+dvbn/n737272/n73/3///////8JAAAPDf7////+2tCcCQAJoAAAAAAAAAAAsAkAAACwmgvADt/v///////////////////wDAAAAAAJCdvb37+9+fn5+f+9vb/bn7+dv729+f+du9/9/5/9+9v///////kAAAAAvv/////7npoAoMsACcqQAAkAkAAAAAAJraAAoJwAvL7///////////////////+wAAAAAAAADanw+9vbn7+fv9ufn525+fn7+Z+fv7n7/fufuf+fvf/9////+9AAAAAP7b////+96QAJCQAAAADAAAAAAJAAAJ4AAJCcnACwy8/////////////////////9kAAAAAAAmtqdvb2/+9v5+b/5+/ufn5vb2/n5+d+fn7373/n/2/n/////zwAAAADQ///////6msmsCgCempAKkAAAAAAAkAkAAA4KCaAMvL7////////////////////7AJALAAAAAJya256Z6f2/n9ufn5/b+f29vb29v737+fvfv5+b/f+f2t//+5AAAACs++////v9+aAJANAAAAqQAAAAAAAACgALAAkADA0LCs//////////////////////sA4AAAAAAAC8kPn/nbvZ+737+fm5+5vbn5+/nb+9n5+9+fv9v5////8PkAAAAADPvP/////7rJyaAKCpAMAAAAAAkAkACQAMC8ANCwCgzf//////////////////////kAAMkAAACQkAvJC5n737+dufm9vfnb29+fvZ+/nb+/vbn5/b+f/p+fD5CQAAAAra3v////vw2woMCQkMALAACQAAAAAAAAqQAAsKAKnJ6v7/////////////////////8AkAAAAAAAAJCa2cucudn729vb25+9vbm/2/vdv5/b2/6/29np+fDwkAAAAAAMnvn///////rJAJCsAAsACaAAAAAAAAAJAKkACQ0MCgnP//////////////////////+QwAAAAAAAAAAJCpy5+62fva262/D5+f+ZvJ+72/mt+b2dvr+enw8PCQAAAAAAy+7/////+fm8sKCQqQDAoAAAAAAJAAmsAAwAwAoJDQ6+//////////////////////+wAJAJAAAAAAkACQsNCdsJm5vZvZ+fn5n/2/nPvZ/bv9v7nZDwnLCQAAAAAAAA/J///////76QDJAAAKkJAAkAAAAAAAAACQALCgkMoA/P///////////////////////5AAygAAAAAAAJAJCQvbC8vJ0L0L258L+wm5C5kLCa0JrQ2g8JygAAAAAAAAzO+/7/////+ekOkAyg0AAKAAAAAJAAAAAJAAsACcCpDanv///////////////////////7AADAAAAAAAAAAAAAAAkJCQrQC9qenwCdvA+cvJy9sPALCQAACQkAAAAAAAC/vP///////76QoLCQC8CQyaAAAAAAAAAACgAAwAnAoMD+////////////////////////kACQCQAAAAAAAACQCQCQCpCakAkJCfCwC5CwCaAAkAkAAJAJAAAAAAAAAAzv3v///////tvpwAAAAAoAAACQAAAJAAmgCcAJoKAJDL7//////7//////////////////+QAAAAAAAAAAkAAAkAAAkAAJCQAAAAkAkAAAkAkAAAAJAAAAAAAAAAAAAA+w////////v7yaCQrLAJAAoAAAAAAAAAAAAAmsCQ2g6e3/////////////////////////sADAAAAAAAAAAAkAAAkJAAkAAACQAJAJAAkJAJAJAJAAAAAAAAAAAAAAnOvP/////////empCskACgwJCQAAAAAAAAAAmgAAAAAJAP7//////7+//////////////////wCaAAAAAAAAAAAAAAAACQCQCQAAkAAAAAAAAAAAAAAAAAAAAAAAAAAOD//+////////+78MkAAAkAmgAAAAAAAAAACQAACQDwrK2p///////////////////////////5oMAAAAAAAAAAAAkAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA8Jz//////////9CwoJoKwKAAoJAJAAAJAACgDJoAkAkADO////////////////////////////kAkAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzv7/////////+evJwMCQCQANAAAAAAAAAAAAkADAoAwLy/////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKz//////////////r0KkAAAAAmgAAAAAAAAAACQoAAJDAsADP////////////////////////////+8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM//////////////vbqQqaALCsAACpAAAACQAAAAAAmgCQAMsP/////////////////////////////72skAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADP///////////////9rQwAnACQAAkAAAAAAAAAAAkAAACskLDP//////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz///////////////+68LAJoAAAsAAAAAAAAAAAkAAAAMkAoMD+//////////////////////////////+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////vNkAAAAJDgAMAJAAAAAAAAAAAOCaAJALy////////////////////////////////poAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv////////////////+66angAKAJAJoAAAAAAJAAALAJAACgwADP//////////////////////////////+80AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz//////////////////9sMAJDAkACgAAoAAAkAAAAAAAAAnAqQ6e///////////////////////////////7oLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////+a0LAKCQDgAAkAkAAAAAAACQAACQAJAMnv///////////////////////////////w2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz///////////////////vtqQAAAAAJAAAAAAAAAAAAAACQCgAKkKC/////////////////////////////////Cp4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADv///////////////////725ygnJALAArQoAAAAAAJAAAAoAAMkADJwP///////////////////////////////78AkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO//////////////////////77kMoArAAAAAAAkAAAAAAACQAAkAoMCgD+////////////////////////////////npCpoJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz/////////////7/////////va2pAAAACQAAkAAAAAAAAAAAAAAJAJAA/P////////////////////////////////qcrQDQCpAAAAAAAAAAAAAAAAAAAAAAAAAAAADP//////////////++//////+/2tAACQCQrAkAAAAAAAAAAAAACQoAAKCeC////////////////////////////////72pAJoKkA0OAAAAAAAAwAAAAAAAAAAAAAAAAA/////////////////////////7+wuQAOAAAACgAAAAAAAAAAAJAAAA0AAA0P///////////////////////////////7+eng0MDwqQCckAAMkMoADAAAAAAAAAAAwA3v//////////////////////////D8DpoAAAkAAAkAAAAACQAAkAAAkAoAwKDv////////////////////////////////2pALC5oNDg8KDLy62pDJAADLyQAAAAAMv9r/////////////////+/////////+5sAAJAAAJAAAAAAAAAAAAAAAAAAAJCcn/////////////////////////////////qcrQwMDwsJCw2+n9qby+/////////////7//////////////////z//////7/7DawJAAoACgAAAAAAAAAAAAAACQAJAAoA4P///////////////////////////////72gmpqakAyeDJoNqwvA+f/////////////+/////////////////7////////+/+wkAAACQAACQAAAAAAAAAAAJAAAAAAAAnp////////////////////////////////nbwAwNrampqQ2g3r25qc////////////////////////////////++///////b3p6aCQAACQAAAAAAAAAAAAAAAAAACQAAwP////////////////////////////////ugmtqaAJwMkOCeuenp3v/////////////////////////////////9//////v+uakAAAAAAAAAAAAAAAAAAAAAAAAAAACQv////////////////////////////////7wJ4AkMDwoLDpDw3tv56///////////////3/////////////////D/v///v/77npAAAAAAAAAAAAAAAAAAAAAAAAkAAAAMDL////////////////////////////////nwCQ6akJyckA8P+///////////////////vv////////////////////v/+fvbyeCQAAkAAJAAAAAAAAAAAAAAAAAAAAAKmsv///////////////////////////////qeDpANrKmgrang//////////////////////////////////////+8///5//+/sJoAkAAAAAAAAAAAAAAAAAAAAAAAAJAADf///////////////////////////////70JCQ6akJyckAz///////////////////+/+f////////////////v//73/6/np6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6///////////////////////////////9raDgkMAOCgra8P////////////////////D+/77////////////7/Pv/+/vf+/mpAACZAAAAAAAAAAAAAAAAAAAAAAAAANrf///////////////////////////////7kJCaywsJCckJz///////////////////+ekNrfv////////////9+88Pvt++nprQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACt+///////////////////////////////6eDJAMDayp4Knv///////////////////76w2t8Pv//////////+v7//277b+fmpCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAra///////////////////////////////7CwmgramgkACcD/////////////////////2cqaDw3r7///////+/38v7/9u9vprQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0P///////////////////////////////70A6Q0AANDgvK8P//////////////////+9oKkMvL69//////////vr/frb/L6b2gkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAra2////7/////////////////////////anpAKCp6akNCQ3/////////////////////n5ywCQCemtv/////+e29r5+tu/npCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8vb3r//+///////////////////////v/CanAnAAMoKygrNr///////////////////qekNoLyay+2+v7/9/78Pmv2/y8uempCQAAAAAAAAAAAAAAAAAAAAAAAAAAAJDAvL+9v5//v/3//////////////7///72w8MCpoLywnJCcmr//////////////////75/angnAAMkJrb3v6/vPDw/ZrQvbnprQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACa2vDa0Lyw+ev5++37///7/7/////7+/68kLCcDQAMCgDprN7b//v6/r//7/+///+/2+2p6ZqQsJra2t6fvfywuQ8K8L8LywkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQmgmtqenp4Prb2trQ8PDw+cvJ6cvJCQoA4LCg8LDakACamsnpy9memtsPDw8LDwvLDwmgwADAAAAKmg2rCcDpC9mtD8vJ6QkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAkAAAoAmgmgmtCgmgCwC8sMnJDAnJDAkAy8oNCaCaAKyw8Kyw8PDw8PC8sPDQsNCw0LyQyenA8LCQ4K0LCwmwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQCQAJAJAJAJAAAJAAAJAJAAAAALCgqaCgqaCtoAkKAAkAkAAAAJAAAAAAAAAAAACgAKAAoACgmgCpAAAKkJC8vLwPCpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAkAAAAAkAvACckMkMkMCQAJwAkAAAAJAAkACQCQCQCQCQCQCQCQCQCQCQAACQCQCQAODAmpCwCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4Kyw6ayp4OngqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAACQsLyenLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAJAJAAkACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQsJqQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////////////////////////////////////////////////////////////////////////////vfrfvPvevfrfvPvfvtvwAAAAAAAAAAAAABBQAAAAAAAHatBf4=\",\"Notes\":\"Steven Buchanan graduated from St. Andrews University, Scotland, with a BSC degree in 1976.  Upon joining the company as a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London.  He was promoted to sales manager in March 1993.  Mr. Buchanan has completed the courses \\\"Successful Telemarketing\\\" and \\\"International Sales Management.\\\"  He is fluent in French.\",\"ReportsTo\":2,\"PhotoPath\":\"http://accweb/emmployees/buchanan.bmp\",\"ShipperID\":3,\"CompanyName1\":\"Federal Shipping\",\"Phone1\":\"(503) 555-9931\"}]";

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from order in context.Orders
                        .Include(o => o.Customer)
                        .Include(o => o.Employee)
                        .Include(o => o.Shipper)
                    where order.OrderID == 10248
                    select order, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void OneToManyInclude()
        {
            string expected = "[{\"CustomerID\":\"ALFKI\",\"CompanyName\":\"Alfreds Futterkiste\",\"ContactName\":\"Maria Anders\",\"ContactTitle\":\"Sales Representative\",\"Address\":\"Obere Str. 57\",\"City\":\"Berlin\",\"Region\":null,\"PostalCode\":\"12209\",\"Country\":\"Germany\",\"Phone\":\"030-0074321\",\"Fax\":\"030-0076545\",\"C2\":1,\"OrderID\":10643,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":6,\"OrderDate\":\"1997-08-25T00:00:00\",\"RequiredDate\":\"1997-09-22T00:00:00\",\"ShippedDate\":\"1997-09-02T00:00:00\",\"ShipVia\":1,\"Freight\":29.46,\"ShipName\":\"Alfreds Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10692,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":4,\"OrderDate\":\"1997-10-03T00:00:00\",\"RequiredDate\":\"1997-10-31T00:00:00\",\"ShippedDate\":\"1997-10-13T00:00:00\",\"ShipVia\":2,\"Freight\":61.02,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10702,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":4,\"OrderDate\":\"1997-10-13T00:00:00\",\"RequiredDate\":\"1997-11-24T00:00:00\",\"ShippedDate\":\"1997-10-21T00:00:00\",\"ShipVia\":1,\"Freight\":23.94,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10835,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":1,\"OrderDate\":\"1998-01-15T00:00:00\",\"RequiredDate\":\"1998-02-12T00:00:00\",\"ShippedDate\":\"1998-01-21T00:00:00\",\"ShipVia\":3,\"Freight\":69.53,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10952,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":1,\"OrderDate\":\"1998-03-16T00:00:00\",\"RequiredDate\":\"1998-04-27T00:00:00\",\"ShippedDate\":\"1998-03-24T00:00:00\",\"ShipVia\":1,\"Freight\":40.42,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":11011,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":3,\"OrderDate\":\"1998-04-09T00:00:00\",\"RequiredDate\":\"1998-05-07T00:00:00\",\"ShippedDate\":\"1998-04-13T00:00:00\",\"ShipVia\":1,\"Freight\":1.21,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\"}]";
   
            ICorrectness result = this.tester.TestQuery(
                context =>
                    from customer in context.Customers
                        .Include(o => o.Orders)
                    where customer.CustomerID == "ALFKI"
                    select customer, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void ManyToManyInclude()
        {
            string expected = "[{\"EmployeeID\":1,\"LastName\":\"Davolio\",\"FirstName\":\"Nancy\",\"Title\":\"Sales Representative\",\"TitleOfCourtesy\":\"Ms.\",\"BirthDate\":\"1948-12-08T00:00:00\",\"HireDate\":\"1992-05-01T00:00:00\",\"Address\":\"507 - 20th Ave. E.\\r\\nApt. 2A\",\"City\":\"Seattle\",\"Region\":\"WA\",\"PostalCode\":\"98122\",\"Country\":\"USA\",\"HomePhone\":\"(206) 555-9857\",\"Extension\":\"5467\",\"Photo\":\"FRwvAAIAAAANAA4AFAAhAP////9CaXRtYXAgSW1hZ2UAUGFpbnQuUGljdHVyZQABBQAAAgAAAAcAAABQQnJ1c2gAAAAAAAAAAAAgVAAAQk0gVAAAAAAAAHYAAAAoAAAAwAAAAN8AAAABAAQAAAAAAKBTAADODgAA2A4AAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AP8MsMkACwkJAAAKAJAJAAAAAAkJoJqQCwkACpCgAAAAD//v///////////LnPz++v/////t//7e/97+/P//2toA2QAAkAkAkAAAAAAJCgAJC8AACQCQAAAACgCsoODg4PDpypAAqcsMAACQkOAAAAkJCwAA0AkAkAAACQAAmgAP///////+//////yt69vf39//////7+3//v////78rwyaCg0AAJoAAAAAAAAACQkKAAsAmpAACQAAkAwJAJAJAPqQraAAkLALAAAAAJAACQAAAJAJqbAJAJoAAAAAwAC//////v///////8+fvL77/+v////+/f/+/f/P/v/5vAsAkJAAkAAJAAAAAAAAkAAAkJAJoMCwAACwAAmgDg4ODvytoMkAAMsAkAAAmpoJoACwCQCQkA0AqQkACQkKAAD////+//7///////Dw/9/trf3//////v797+/8/e/sDwyawAoAoJAAAACQAAAACQqQCgAAkJAACgAADKAMCQCQkPkA2gCakADaANAAAAnAkAAAkLAAqamwkAAAAKwAAAv/7///////////7anfD/n////w//////3+/97/79/5qaAJCQkAkACQAAAAAAAJCpAAkJqQAKkNCQAAqQALDgysoPrpqcoACpmpCwAAAJCwAJCQAAkAkNAACakAAJAAAJ/////////v///+2t68/e/9ra3//////+/vy+/e2+/K0NDgCgAAAJAAAAAAAACQCQCQAAAACQAKAACQAAAAAJqQDfCQypAJCQ6QkAsACQqQCQAAkLAJoJqQkJAACQsACf///////v/////9CenPv78P///v/e/////9/9/r/v2pCwqQkAqQCQAAAAAAAAAAAAAAkJAAkKkJAAoAAKywCwwOCvDwvAkAAAmtqQkAAAkPAACQCQkAmQmpoJAAAAAAAP/+///v/+/+///qnp+/3t//3//f///P///v7+38/e/AANAACQAAAAAAAAAAAAAAkAkACgCQCQAAsAkAAJAAwAoJwP8PC8oLCgAJDwqakACQsJAJAAkAALDQkKkAAJoAC//////////////Q+enw++8Pr8v+/9//////3/r/r577wKnAoAkJAAkAAAAAAJAAAAAAkAAAAAsAAAAKAAAAsMkKAPCw8AnAAJAAsAnAALAK0ACwCZqQmpCwCZAAAAnAD////+//7/7///ypDw/P/f3/3//f2+//3///78/P3+/ACQCpAAAAoJAAAAAAAAAACwAJAJAAAJAJCayQAAqQAKDAnPAPANoAkAAJCfC5CcAJmgkAmgAAAJCQmgCQAJoJ//////////3//umc8P2+nvr8vp777//ev9v////w/t8KkK0ACQCQkAAAAAAAAAAAkAkAAAAAAACaAJAAkAANoJAKCvra2wCayQAAAAkACpAJrQAJAJCQm8sJyZAAkACa//////7//v7+/9rLD9rf+9+f/f39/f///+///+/PD77Q6QCcAAAAAAAAAAAAAAAAAAAACQAAAAAAmgAAAJCwwA6cAP2pDprJoKkKkKmpCa0Am5AK0KkACQkLCpAAAJC9/////////////AmtCw8L7a/p76++v9r9//2//////P/pAJoLAAAAkKkAAAAAAAAAkAkAAAAAAAkACbAAAAAAsAAK0PreuekADQAJAJDQsJmpoPCQCQCQkLCQmQAAAACe///////v//z/wPDa/Pn9n9+f+f39/v//79/t///vz/7engkAAJAAAJAAAAAAAAAAAAAJAJAAAAAJnACQAADwAAkAAP263K2pAKkAAACwCcqcCZoAsAkKnpALAKAAkAn7/////v//7+/8CwmtCa3r7+nvD8vvn73//////////+/wAJAAkAAJAAAAAAAAAAAJAJAAAACQCQCaCpAAAAkAAArKCvrtq/mtqQDanJCempmpyamZCQCQCQmQmQAAAAC8//////7//f/LwPDantv9+f+d+/+f7f/r3/7b///+///sCaywAAAACQkAAAAAAAAAAACQCQAAAJAAkAAAkACgAAAA0P2+2s+8vLoJoKAJCaybqZ4KmpAJCwC8qQAAAACb/////////v8AkJ6cue2vzw/rzw/p+8/f+///z///////4JAJAAAAoAAAAAAAAAAAAAAAAAAAAACaCQkAAJCQAAAAC//p/byem8kAkJkAsJsNmgmZwACQkJoJCQAAkAkP///+///v//yQqQCw2tvfv/29uf2/z/v/7f2/+//////+kAsMAJCQkAkAAAAAAAAAAJAAAAkAAArQkKAAmgAAAJCaCfn/6+vr2tutC8oJwLywvJsAqQkLDwmQsAAAAAC5///////978oMnK0Nrb6+2tvtr8v8vbz9/+/8/f/////tAACakAAAAJAAAAAAAAAAAAAAAAAAAJAAAJCQAADwkAAA2v6tv9vfD60KkJCwsAkLC9C5kAAAkAAJAAAAkAkP/////v/v/9CaAJCw8P35/+2/37y///+v+//7+///////4JAAAAAAkAAAAAAAAAAAAAAAAAAAAAkAkAAAkJAAAAqamvna2vy/vL+fCw8JC5qckLkOkJCQuQmwkAAAAACQv/7/////7+AJCa0Ly9r+n9vL6f/a2v35/f3/z5//////wAAJCQkACwCQAAAAAAAACQAAAJAACaAJqQAAAAsJ4JAMkP6trfvw29rwvAkPkAALCw25CwAJAAAJCwAAAAAJ///////v/wkMCsmtva/b/r7/3/D//9v/7/v//+/////+sAAACgAAAAAAAAAAAAAAAAAAAAAAsJAAAAkAmpAAAACQqfDfrw/p6+vb6bCwvAkL0JqakAmpAJCwAAAACQCb////7//9/AAKkJD5772+2/35/p/72+//2/z/n5/////9AAAACQAJCQAAAAAAAAAAAAAAAAAJwAAKkJoAAACQCaAKnP6g0P2/vJytvwkNCwCZCwm56QCQsAkJCQAAAAAAD+/////v7wAJDa8Pnt7b/Pv+n/rf79/L/////vn////+kAAJAAAAAAkAAAAAAAAAAAAAAAkLAAAJAAAAsPCgAA8NC/3/r6/tv7+envC6mtoKnJrQmgkACQAAAAAAAAAJvf///+///gkAqQnw+/v9v97//9/737//6f29+f7/////wJAAAJAAAAAAAAAAAAAAAAAAAADwAACQmpCQCQkJrQAAAPvv3/2/6empub0J25DQmwkLkJAJAAsJCQAAAJCQD//v////7QANDLy9re3v//+f2v+f/t+f3+/v//n5///5sAAAAACQCQAAAAAAAAAAAAAAAAsJAAkACQAAnwrAAACgvPzwvtr/n5rfD/qasAsJ6amp6QCQkAkAAAAAAAAA++/////t8AkAmw8P37+/y9/+/97+37/++/n73w/+///+AAAAAAAAAAAAAAAAAAAAAAAACfAAAAAJvKkAsAkJoK0NCfqeya+e8K260L35yfCwkJCZmpAKCQAACQAAAAAJCf///+/+/ACw4Pn/r9/f//r9v/vfvfz5/P/fv/vb///9mgAAsAAAAJAAAAAAAAAAAAALywsAAAmgCQAJ6eAACQCgoP/L/tr5v9rbvwsLsJnanwvLDQAJAJCQAAAAAACQsN//7///8AAJnw8P36/r3/3//P///r//+968+fy9rf/60AAAAAAAAAAAAAAAAAAAAAAAkNAACQCQsAnwkJCwDAkNCf6/y62+8L2tqf28n6C5AJAJmpCQAKAAAAkAAAAACa/t///vwJCQ6fn769//+////73p/98PD/vfvvv/2///CQAAAAAAAAAAAAAAAAAAAAC5qaAAkAkJAPoLygAAsLDgoPDwvt/vm8ra36mpqQmembC5qQAAkAkAAAAAAAAAmt///e/9oADwva/P3/+f/P/p////+ev9/63r/by8vp7wmgAAnAAAAAAAAAAAAAAAAAkMCQCQCpALD5CQAJANAAwJDfrP7a+fnr25qb29vbC5qQmQ0LCQCQAJAAAAAAAJCa3v7//vAJAJ8Pn7/L/v//n/+fz57/2vD9v9D9vb2fn/AJAAoAAAAAAAAAAAAAAAAAsJDpAJCQucmgDgkMAKAAsMsP2w8PD76cvPntqamtvLmtoLCQmpAAkAAAkAAAAAAJv9////wAmsva/ev/372//97/v/n6/f8Pnr++/vra2+kAAJAAAAAAAAAAAAAAAAAAmgkAAAkLCr0JCQCwqQDwyw6fDtr56em7y56729vbCa0JmQkAkACQAAAAAAAAAACaD//v7wAADby9+/3w+97//7/97f79+trf6fy9vZ+9C9CwAAywAAAAAAAAAAAAAAAJyQqQCpC8nQCgALAAnAsJrAkPC5ra2/C8u8udrampC9qbCpoJoAkACQAACQAAAAkJ2+///eCQ2w+/vt6////9rf37+/vfrb/628va2++QvQCQAJAAAAAAAAAAAAAAAACaAAkAmZqQsKCQuckPALwKwLDvsMCa2p/b/Lnrub29uQuQmckAmQCQAAAAAJAAAAAArf7f7wAAqfD8/b39/f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oA8ACakLCgsAAAAAAAAAAAAAAAAAAAAAAAAJCQkLCamtC9rfn/////Cp+p8Py9rb6fvp6amfCQubwLCakAkJAAAJCQAAAAAAAACQsK2/v//////9/+3/2968va0J4JwAkACaAAAMkMAAAAAAAAAAAAAAAAAAAAAJoJAACgCQmp8LvL2v/9////CfCenpva+/nw+bm9rwmpAAmQAJAJAAAJCQAAAAAAAAAAAACdvf/////////5+frb3fD5rakOmpDLAMmtqQAJCQAAAAAAAAAAkAAAAAAJCQAACQkJC8kPDw2fqfvb///7Cenpqb+vn57b+tramZqckLmgmwCaAACQAAkAAAAAAAAAkJn7///////////f/v3/6w/a2QnpAMqQCQAAAAqaAAAAAAAAAAAAAAAAAAkAAACQAKAAsAranpq+n9++/f/fAL8L2sn5+/u8vbm5y8kLCQAJAJCQCQAAkJAAAAAAAAAAAOv/////////////n5+tvfmtrPCa2pAJ4LCQkJwAkKAAAAAAAAAAAAAAAAAKkJAJCQkNCQmtsL3pr7ntv///AAvan7y+28+/mvywuakJsJCQkLAJAACQAAkAAAAAAAAACZ+f//////////////3/y96fmw8JCcvAkMvKDgkArQkAAAAAAAAJAAAAAACQAAAAAAALALyw+Qvb2t6w6fy+AAmtravbv7n5/bn5C9C8CQ8ACQkKkAAAkLAAAAAAAAAAu///////////3//fz569va3w/NmtraCbypAJCQoJAAAAAAAAAAAAAAAAAAAAAJAJCQsACQkPAPmt6akPnr/rAJrb2tn63w8Pqbyw+QuQmwkJmpAJAACQAAAAAAAAAAAL3//////////////7+/3a3tsP2wrQmsmsCQy8kACcALAAAAAAAAAAAAAACQkAkAAAoACQkAvLC7DwsPDw/vwPAACgvb6f+/n5+tvZCwkLAJCwCQqQCQALCQAAAAAAAACb///////////////f39r/n7zwvL2a0LyQvKkAoPAKkAAAAAAAAAAAAAAAAAAACQCQkLAAoJC5ycsPDwmrD9v+kLyQC9vp/a8Lnwu+mfDQkLAJCQkJAACQAJAAAAAAAAn/v////////////9///L2f6fvfD8vprQvLCdDw0AkAAJAAAAAAAAAJAAAJAAAAAAAJAAkJwLDasLzwsLycsK2rDAsKnp6fv7296fnJvpsLCQkKkLCakAAAkAAAAAAAAJ+9////////////////2//vnw+p+byQ2pyw2goJoLypygCQAAAAAAAAAAAACQAJAAmgqQAAkAmpy8ucvAsLD9rfALwNvL+9r56wubC/CZAJCQCZAJCQAAkJAAAAAAAACb///////////////f+ev8n57fCfy8mtqcsNqemeDQCQCcoAAAAAAAAAAACQAAAAAJAAkAALALy8sPnqkLDp6amvAACwCw2v3/n9vp+QvKmanJoAkAkAkAAACQAAAAAAn//////////////////9+f8Pmp3gmtrbyfDa0JygmtrLAAkAAAAAAAAAAAAAAACQAACQAAkACQkPCQ6ZDw+bDw8PAJwLyan7+/++nwv5uZoNCwkJqQCwCQCQAAAAAAAAm9v///////////////D/np+e3auekLkOmgsJranJ6QkMmgAAAAAAAAAAAAAAAAAACwCpAACQALCw6bysqfDg8LC7AAqQoJ6cvfD5+b0PDa2QsJAAkJAJAAAAkAAAAAAL///////////////////56/D5q9Dw8MD5y9Da2p6anLy5rQ2pAAAAAAAAAAkAAAAAkAkACQCgmg0L0KnbngufC8kPCgnLDanr+vvb+vCwmpsLCakJCQCQAAAJAAAAAAC9v////////////////9va2ckJDQ8AnpuQrQ+tqcmpypAAwLAAAAAAAAAAAAAAAJAAAAAAAAAJAJC8Cp2g6fngCwvvyQC8C8ufn5+8vb25+QkJCckAALAJAAkAAAAAAAC///////////////////+dmpmgkJCfCQytmvCenpraCenpqQCekAAAAAAAAAAJAAAJAJAJAAkACQvLDQqfmtrQ8PCbCskLDaDa+fD7y8vLD56a2pCakAkAkAAJAAAAAAnb3//////////f/////9vpyQ2dCaAAnpsK0J6Z6ekNvJqcnp4AoAAAAAAAAAAAAAAAAAAAAAAJCgCcsJ2g+/ALCw8NALAPCp+p+vv5+/n58LkJCQvJCQCQAAAAAAAAAJ+//////////9v/////2fyfm9qQvJ0JAAycDwnp8J6aC8vKkAkJDQAAAAAACQAAAAkAkAAACQAACQmgCaC9vKngnpAKCfywCZ6cv5/a29sLC56QsJCQAAkAAAAAAAAAALv/////////n7/////b3/n5DQkNkJAACQmpsLyw8PDw0JCdrLy8oAAAAAAAAAAAAAAAAJAJAACakA6Q2g+enp8J6Q8NAAsPAKm/n/r/va+fnLm9CakJqQCQkAAJAAAACd/f//////////37//29uZyekJCQCQkJAACQycvfD56QvK2gCQAJCcAAAAAAAAAAAAAJAAAAAJAAAJALCZnp6eDamgALAAnp6Q6frb+fq9vpqcsLkJCwkJAAAAAAAAAAAL+/////////+fr9/9vQ0AmZD5y7yeCQkJAJCpCtvL2+kNDa0PDwoLAAAAAAAAAAAAkAAAAAAACQkKkJoOkPC5oPDJANoACemsmp+/373629+bD5ywkJAACQAAAAAAAACb3///////////2/+QAJqfvv/++cvgkAAAAACQ+a28vJ6ampCwkJ0AAAAAAAAAAACQAAkAAAkAAAAJC8kJra0OnAkAAKmgCwvbC8veu/+9v6mwmasJDakJAAAAAAAAAAD///////////2trQkAmb8P////mv8J4PAAAAAAkPmtqanJ6csMvAoPAAAAAAAAAAAAAAAJAAAJAJCQ8LDa0PDpCw4AAPAACa2t6b+//fnr258PC9nakJAAkJAAAAAAAAm9v//////////72pAAAP37/b/ryengkAAAkAAAra/b3NCwmpypCpyQAAAAAAAAAAAAkAAACQAAAA2gkNoJqQCaDJAAAJ+pDAmpvA/5+v+frfub0LqZqQmQAAAAAAAAAAC//f////////+f+crQCQsNrZvQsJCQCQCQAACQkJraq8vLyena0KnpoAAAAAAAAAAAAJAAAAkAkLCQqQkJ2p4NAAAAAOkAqayeC/n7/9v/263pC528kLCpAAAAAAAAAAvb//////////3/npmQkJCZkAAJCQAJAAkAAAAAC8mt2a0AmpCpqckA0AAAAAAAAAAAAAAAAAAACgAPCaywoMkAoACQCbCpAAmgv57/z7/wvZ+5vQsLkJCQCQAAAAAAAAn/+/////////vw////mQkPCb2ZyQCQCZAAmpDa0AvbCtC9vJ6cngoPCgAAAAAAAACQAAAJAAAAkJCQmtsJDbCwyQAMnvkKmtrQAPufvfn/+vm8sL29qekJAAAAAAAAAJuf3/////////3/vb///9+ZvJCakJ0LwMkLwNoJC9C8vQ8ACpCaCZyQkAAAAAAAAAAAAAAAAACwAAoLywAAsMAJAACw8A+gCamskJ7/+/6fvby52wuakJALAAAAAAAAAA/7//////////+f+t//////29vJ/anJua2tsA0OAK0Lywn5yenp4KmsDwAAAAAAAAAAAAkAAJAJCQkJrbyQyanKCpDLy/ALCgCpoAufrfv72/vamtmtuakJCQAAAAAAAAm/+///////////n/v///////3/C9+94NCQDaCwn5rcsPAAsJCQmcDQsAAAAAAAAAAAkAAAAAAAAACamgkKmtCwkMqQoJCwALDQALD//728v5y5+Zrb0JDQAAAAAAAAAJ/9///////9v9v5/b3///3/3/+wn8vLCZ6emprQ8A27DQnpDQ8PDgsLDAAAAAAAAAAAAAAACQCQCanpyQmpAAvAyg8OkPoAqQsLwA2/+e//8PvamtubD5CakJAAAAAAAJv//f/////////ev///////+//J6b28ngkA0NCanbrA+ememgkAkJAMkLAAAAAJAAAAAAAAAAAAAJCavLDADwmprfrwCw2pCgCwsKAL/5+fv9qfma2tsJqQAAAAAAAAAAn7+////////9v58Pn9/////f//np8LCQqbCw8NoNm9Cp6QnLDwyw8JrQAAAAAAAACQAAAAAAkAkAvJCQmpkADQr/37wPqQqQsNrQmt6//r37/wvJubvakJCQAAAAAAAJ/f////////37/fnb////////29CfDQnpwMkNCw2w8L/QkPCQ0JqcCeALwAAACaAAAAAAAAAAAAAJCw8J6QoJoL3//ssLAKAKALC8oJvem9+/+b27Db0JCakAAAAAAAAJv73//f//////362/y///////v8vpCeAAC5rQsNsPCckLDwC8sKnAsAnwAJAAkAAAAAAACQCQAJC8vakPCayQy8//7byssAsJqa8PDw+//6np/+sNupv56QCQkAAAAAAL3//////////b+9vJvb/f//3//b2ekAkJAACw0Ly5y7y8kL0JDJCwDaAAnACQoAAAAAAAAAAAkAAJCpywvAvLAPD9+ssLywCgAJCw8PD5/tv/v5+w28sJkJoAAAAAAAAAvb/7////////35+8m9////v9+/+Z6QAAkMkLDQnLnJvby8ram8DQsJ6QqQngnAAAkAAAAAAAAJCwmQvJy8C8sL8On54OsAoKmgoPCa8Pvbyw+fvbuZ/7CwmQkAAAAAAJv//f//////////nbnLn739Cbn9sPkAAAAJAAmg+Q+enpnLkJwJsAkMkOkLAJALAAAAAAAAAAAAAJ6ekLAJrangC8oKCZALCQAAmpoAn62v+f//2tD/uQ0JAAAAAAAAAL29v/////////29vpy9///5n5/bD9DpmpCakNvJkPnpy569DLCwwPCpoJAAywnwAAAAAAAACQkJCempCwy8vLywsLDwmvsACgoKCayeCf/9vtr7/7+an7mtCwkJAAAAAJv/////////////35sJCf//////2/vayQ8NoACfDw+fvenQucnLCQyQCcrakOAJAAAAAAAAAAAAsJqevL6a2ssKDKAKAA+pAJCQoJoJoJr627/f+9v5+ekJAJAAAAAAAJ29vf//////////vf35+f///////a25rJCw0JqQvby8mtqfy5qcsLAJ4JAJCQng8AAAAAAAAACQC8kJy8vPCw6csJqQsPAKCgoKkKCwCQ+f/9+/vf6fvp+akACQAAAAAAv//////////9//378PD5//////3//NmenLAJyemtvb/b26nA2wnAngkKkMoJoJAJAAAAAJAAkAkJrakA/6zwsKAKAKAJCwCQCQCgkK2vD7y/r//729vbkJCakAAAAACZ+fv//////////f+/35+f///////9ubDpywCwnp/a2tC8vJ29sMsLCQsNCpCenQ+eAAAAAACQAJqa2prL2t8LDwsLy8sPoKCgoKCQqQsJrb/9//n/v6+/CwkACQkAAAAJv9///////////7/fv/2//9//////7ema0MkNqdqfvb/fn+vLybycqcAA0AkJCpAAAAAAAAAACw0JqcC9raD8oA6enp6g+QkAkACgCgCpAMv7+f8P/5/b/byZAAAAAAAK2////////////9//37/b3//////f294JqQCa2p8NrQsPCZ2w8MsJALywqcoAsPCQ8AAAAAAJAAmtmr2vytoL27Dw+v3/CgoKCpoJoJqeCwvP//v7/fu/mwmgkJAAAAAJn9v////////////9/9//////////vanawLC8kPD72/35/+npD5Da2gkJAKnJDQvLAAAAAAkACQsL7QvwCQDwoMsPDQ6rALCQCQAKCaAAkA//v//9+/ntvLkJAAkAAAAJ+//////////////b//+/////////3p2gmcnLv/np2tq8sJD5+a28kJysAJAACa0ACQAAAAAJoLCfmvwNDr2prbrL6vvcsAoKCgoJCgsLDpAP/5/7/7+7+a0JCQAAAAAJv////////////f//+9//////////+9rZ4AsJyQ+evb/b3/+emtkJraCZoAkLAAC9oAAACQAAkA+trQsKkMDwmg2wkACrywkAkAmgCQCwsOsJr///v9/fvbmpoJCQAAAAmf/////////9////3//f///////9/L2gm5y8v56drfD9qdr57a6ekNoMkAAAkJAJyQAAAACQCQn62sAJCwsPCaAOC8kJoAoKCgoAoKmgCwDK37/9+fv5rbyZCQAAAAAJv///////////+/29/5//////////+9rbwMsLCenr2w+a362em9npra0LAAAAAACamgAAAAAAsNsJqakMrA8AvJrQsKCukKCwkLCakJoJra2gm9+/v78L/7kKkAkJAAAJy////////////f/////////////9/LyQCbDQ3p+dvP2t+p2vnp6a0JqQwAAAkAkJwAAAAAkJCavLwACgkLALAKkLAJqZ4JAAoAoAoKCwsKkADr///an5mw+ZCQAAAAAJvb/////////////fv9///////////5Dw8MmtueD+2wvanevQ+emtq8npqQAAAAAKngAAAAAAD5ywvADQAAmsmtrA8OAKmgqQCwmpAJoKCw6QkNv9v/m/Dbnp2pCQAAAAm9//////////////3//b3///////nv8JCw0Ky9ub79r9qZ69rb3p2p6cAAAAAJCQkJAAAACQsKvAAJoACsoLCampqQsNoJCgoAoA6wy5ypCgAL/7/56Qu56ZqQAAkAAJCfv///////////////v//////////5Dw0JqdvJ78kL0L3pnK2suenLCakAAACQAAvAAACQkACdCwCaAJAJCQDp7awKwKkKAAkKCakAsAqcoJALy9v/vbkNuaCQCQAAkAvb//////////3//9//3////////96c8JoKnay60Jv+y9qay/m9vLy8npwAAAAACpyaAAAACpsKAMsMkAyaCgqamgmpC9oAqaCpoAoLCamgmgkJ//+/mtC5D5kJAJAACQC5////////////D6/b69/f///////7DQDZytvNrawJm8ntucvLy8sJ6aAAAAAAkJoMAAAAkADJqQAACpoACQkNrJ4KAK0LAAAACwng6tqaCaAAC9rf+bkJua2wkACQAJkPm///////+9vp/by936+/3////9vNsLCgsAmp2tvKwKkA+py8va36nJ6QAACQAMmwAAAAAJCwwLwLDAmgoKCwmgCQsPCgCwsLAOoLCaDpCtramv+/vp6anJsJAJAAAACbn//////9/f+fC8kKkNntv//////7wA0JDJ4MqQCQkJC5DanbyfCcupAAAAAAkLDJAAAACakAsACQCw4JAAkKnLCgAAsAoAAACpCaypqQqakAy9v9+ZkJCbyakAAAAJnw2/3/////+/D8vQvJD5rb//////y8kJCsCwkJnAvLysDAy568usnrycoAAJCtCpywAAAJAADLCcsA8AmgqaCtCgvJCvCwkLCgsKDgsOmpnprLAL36/6mwsJuQmwkJAACZqb/////5/f+b2tCakAkPn//////awKCQkACeCtAAkLCQsOnLDbrQnpyQAACQnLALkAAAkJqQygnpraCQAJCamtAKkLwAoAqQCQqQ6QoOsPC8vJrb29rQnLC8CQAACQmp28v9v/+/+8vACQAJCa2w+f////35kA0LycsJAACQAAAACQsJ4NC8sLAAAAAKCw8MAAAAAA2pvaAACgoKCgCpAKkAoMsKCaAKCgmgmtCwCgsLCwv/v/mbCQnbkAkAAAkJqb2//b/fDwkJ4KnAsNCdv7////+soJCgCwDa0LAAAAAAkACemw8Ly8sAAACckNALAAAJoJqcoJy+kJAJCQsArQ4LybCwCgmpAJoL4KvJqfDw8NC9vbywmwmpoJCQCQm5m/n72p2wkJ4AANAJyQrbD9///9rZCeCQkA8AAMAMAJAAAJDwkOkNDwwAAAmgDakJAAAACanLDwsAAKCgoKAKkKmgCvAJqaAKCgAAC8Cq0KmqCw8L+/ufAJCQmwAAAACa0J69vaAJD/8AwAAKAJAJ+/////+gAJAMAJC8AAAAAAAAAAAJ4J6w8JoAAAAJqQAAAAAJAJ68kPCpoACQAAqQ6wAJ6Q+gAJoAkKmgALCaC8vZvLD56f+bkLCfAPCQkAkJuZmevZAAm//gAArJ4AkAn5////39oAmpAADvCgAAAAAAAAmgnwnLDw0AAACQwPAPAAAAC8kL8K0AALCgsJCpAOmgoPALCgCwoAAJoA4MsLCqywvL+/nr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CpCQoMupAACgmgsLCaCQAKAKCQoACQvL/56b+fv/kJoJn5qanQkJDwkLn5vPuf+f29va+fvrn+2/vf/rz+vL372tvLrKkAAAAAAAAAAAAAAKnp6ayakAsAAKmgqQAKkAAKCgALyaCpAAoJoAoACgqQCQCgALAKCb2//9v729rQkACw25+5qQmb29Ca257wvbra352t+f75/P3629vb376erby8mcAAAAAAAAAAAAAAkNCaAAsACgALCgAAkKmgCpoAAJoPCgAAoKkKALAKAAAKCgsAsACwme//vav9r7makAmfsNsAkLDwmpu9ufm9vL358L//nt+e+/r9/e2v6e2928vJ4KAAAAAAAAAAAAAAAKC8nLAKAACgCQqaCgAAoAAJoKAJsAsACQqQsAqQsKAAAAAAAKAAoJqf+/y/8P+tqZoJ26n5AAmfna0J6enL29qen/Dw/7/5/f2/r7/b357avLyanAAAAAAAAAAAAAAAkJ8LoAoJqaCaCgAJALCgkKCgAAAOmgAKAACgCpCgAJCgkKCgoJoJAA2/37/b35/b2tngvdufmQCwuZufmb+by5+b2tvfn8v/vr/P39r8vvn96entqQkAAAAAAAAAAAAACgn8CwCgAAAAkKCgoACaAJAKCwoL8LCgCgAAsKCaCgAAoAkAkAAKC5oL//+/++n/rauZC6nrCwkJ2vCw+8nam8vPvby7z73p/f29vL+f3b6en56awKAAAAAAAAAAAAAAkJ6QvKkAoKCgoAkAAKAACgqQAAAOAACQCQqaAAmgkAoAAKAKCgoAkAyf+9vL/9v729Cem9+50JC5qZnLkJup/L27y8+8+9+/y/r/7/z/6+n58OmtDQAAAAAAAAAAAJCayevKAAAKkAkAAAoAsAAKCQAAsKmrmgoKCgAACwoKCgCwoAAAAAkAoLAA////v/8PvL256bn5qQnL2em9qenQufntvb/fva/Pvf+fn58Pn976357aCpAAAAAAAAAAAAAJCpAMCwsAAAoACwAAAAoJoKmgAAAMsJAAAAoLAACQAJAACaCwCwCgkAmpC/vb2//9+avLnp6fnpqQupCa2ZqfDw+by9r579v969z+8P/56fnPrantkMAAAAAAAAAAAAAAkLwLAACgCgAKAACgCpAAAAALAKALygoJCgAACgsKmgoAAAAAAAoAoJrAvf/+va2/r9+fD5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CgAKAKAAsAsACQCgAKAKCpqQoAkACQAAsLCgoAkJALCgsAAJoKAMoLCgCaAAAAAAAJCpAAAAn77/3/////vb7b2emvmcvp/Lufn9vdr9vLz96enp4ACgoAALAAsKAAAAAJoAAAmgCgAAAKAAoJoAAOCgCwoKCgqQAACQAKCgoACQCgoACQqQAAAAoAqaAKAKAKAACpCgAPvf//r////tvr+t+f652wvfzw8L+v2v29vgvL2sngCQCwoACgAAmgCgsAAACgAAAACgoAoAkAAKANvJoACQAJAKmgoKmgAAkKCgAJAKCgkKmtqaAAAACQAACgCgqQCQAAnr////2////fz77+n+vP+vv///z5r9r+2/y8oJoAsKAAkKkAoAAAkAAACgqQoAoKAJAAkAoKAJAKAKwLCgoKCtoJAAAJqaCpAAsKCpAACgAAAACwAKCgmgAACQAAoAAAAJ////7///v/+/29vb2/n/3/np++/a/5D8sPDawAAAkKCgALAKCgoAoKAAAAAJAJAAoAoKAAAKCtsAsAAAkAkADKCpoKAJAAmgAAkAoLALCgsKAAoJAAAAqQoACgCQoAAACf3////P/L3///7+////vv//7b2tvP8LwAAAALCgoAAAoACQAAAAAACQAKCgoACgCwAAAJoAAKywCgoKCgoLCwkKyQoKkKAAoAoAkAoACQANCgAKAKAJAAAKkACgAAAAAAr5//////////n5/////b+f/+/+/w4MvAAAsACQAKkAmgCgqQoLAJoKAAAAAKAAAAoAmgAKAPkKCQkAAAkAAAoAmgkACgCwCaCaCgCaAKCgqQoACQCgCgAAAAoAsAoAAAkA+f/////p8P////rfv/7//9//C/nwAKCpAKCgqQCgAAoAAAAACgAACwCQoACwoACaAAoJAKDpAKCpqQoKCwCQoACgqQoACgCgAJoACgkJAKkAoKAAAAoACgkAAJCQkAAPC8m//////////9//////3r/Ang4MsAkACpAAAAoAoJAAoKAKAAAKAACgCQoAkAoACgkKCvkMoAAACgAJAKCgCakJCpAKAAAJCgAKCQCgoACpAAkKAAkKAKAAoKCgCaAADL/Ly/n/////////z/3+qfDwCf2wDwoKkAqaCgAJCgoAkAAAAKCQAKAACgAKCpAKkAoAAMqwCwmgAAsAoJALAA4KAKAJqaCgAAqQoKAAywAAoAoACwAAkACgkAAKAACwCQrQ/P///e3///vb//6f3g/KAL7fAAAAoAAAkAsKAACgoAsAqQCgAAAKAAqQAKAAoAAKkL0KAAoJqaALCaCgCwmtqQmgAAkAqQAAAAmpoKmgAAAAoAoAoAAACgkACpAAsK0LCwvKD7//7w/vy8ngC8sJy8v62pqQALCgoKAACwCQAAAAAAAAoJoJCgAKmgCwALCgCsCgkKAKAACwCgyQsPrangoACgCgAKCgsKAAAAAAmgCgAAAAAKkKAAoLAAoKAJCskAy9+8sAkJ6QvLwAvJ4OsL2toAAKCgCQAAALAAoKCgCgCgoAAAAAAJCtAJoACgAJoLsAoJqQDprL6amvD5//8JwLCaAJoAkAAJoKmtoKAACQALCpoAAACwAACgCQAKCQrLAAAAAAAAAAAADwAKkJCsvamgoAkAoKmpoAqekAAAAAAAALAKAAoAqaC+C+kACgAM8JCgCgkKm9vLDb/////6mgrAmgAKCgoACQ4ACQoAoAoAAACwoKAAsACQoAsAoKkAAAAAAAAAAAAKALywoKCaCsAAmgoJAAAACwCp6wsKkKkAkAAACgCaAPAL3L6ekKkJoKCQ6QoJrb/w///////88JywoAqQAJAKCgCaCgkKAKAKCgAACQAKAKCgAKAJAJCpqaAAAACgkAsJywAAkAmgkLCwAAAKCaCgAAsPnwAACgCgoAoAAACg2gv8v/DwoACunpAKkKCa3//L2///////qeug2pAKmgqQAJCgnACgkAkAkAoACgoAAAAAAAAKAKAAAACgsJAACgAAoKCwoKAACgAAoAoACgCQqa378OCgAAAAAAAAqQoJq9/L/9/62poLAAqQoJypq9+/D7/////735/foAoAAACgsKAAoLAAoKCgCpALAACwCaAKmgoAoAqaAKCQAAoLAJrakJAAAJoLALCgAJALAACgAJqfywkAoAoAAKkAAAkKyev////fDgANupCpCgsA2vvLvt+/v//fv///2tCpCpAAAAmpAAqQAAAKAAoAoAAAoACQAAkAAJAAqQoKCgAAoKAAoKCgoAAAoAAAsKAACpAAoKnpvKAAAAAAoAAKAKAJq56f3///+fALwAqenLALCfDwyb/en76/3//56aAAoAqaCwoAoLDgsKkAmgAAALAAAAoAAAoAmgoJAAAAkJoPCQmpAAkAkKAACaCwAACgAAoJAA2toJCgmgCpAACgAACgAOn/////DgoMqekLCwCwvw8Nu+mpsPn5+//+2gCwkLAAAAALCQAAAAAKAACpoACgCgAKCgAKAAAKCgsAoKCQCgoAoAoAoACpoAAAALAJoKAKCpoLDwoAAJAACgAAAKCQD5////+86QkLmprw8JrJ6f++8Nra356wvf/braAKCsoKCwsACgoLCgoAALAAAAAJAJAACQAAAKkAAAAAAAoKAAAACQAAALAACgoAoACgAAkAAAn/+fAAoAoAAAoJoACgsKv9//7bCgoM8JCpDgmpv//5/72/v72toLvtsAmpCQkJAMC8vAkAAJAJoACgCgoKAAoLAAqQoAoKkACgsJCQsLAKCgoLAACgAJCpCgAAoAoKmgqf/p6QAAAKAAAAAJAAC8m///2skAALqa+euQoP////8Prf3/ywvf2/DpoAoKCgravLCpoLCgoKAKCQCQAAAKAAAKAKCQAACgsAAKCgAACpAAAACgqQoAAAAJCgCQAAAJv///CgCgAACpCgCgoKkL7f79oLCpoJ2vkLDKn7///9qfn7/9vp+///ywAKnpya2r376eAACQAACQCgoAoAoAAAoAAAAKAKAAAAoAAACgAAAKkKCQAAkKAKAKCQAKAKAL7fnwAACQCpAAAAAAAJDr2/n6DwAAAOsJ68sJqf////8Kn///+f////vAsJC6vpvf/98JCwoKCwoKAAAAkAkAmgCwCpoAAJALCpCpALALCgoAoAoKCgoAoJoAoAoAsAsAm74AqaAAAAoAoJoAmgqQ688NoKCgAJ65C54Kmt///w28qf///////9+8AKydvf////76AAkAAAAJCpCgCgCgAAAAAAAJoAoAAAAAoAAACQCQAJAJCQAJAACQAJAAAAAKDAmpAAAKAAAAAAAKAJCpALCgkJCQoPkOngmpy7//+/oJv/////////8LCwu///////+csKCpoLCgoAoAoAoAoAoAoAoKAKAKAKAKAKCgoKCgoKCgoKCgoKCgoKCgoKCwmpoAoAoACgCgCgCgCgqaCwqaCgoKALCpoJoAuf///wALD/////////+eAL3///////8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAAAALStBf4=\",\"Notes\":\"Education includes a BA in psychology from Colorado State University in 1970.  She also completed \\\"The Art of the Cold Call.\\\"  Nancy is a member of Toastmasters International.\",\"ReportsTo\":2,\"PhotoPath\":\"http://accweb/emmployees/davolio.bmp\",\"C1\":1,\"TerritoryID\":\"06897\",\"TerritoryDescription\":\"Wilton                                            \",\"RegionID\":1},{\"EmployeeID\":1,\"C1\":1,\"TerritoryID\":\"19713\",\"TerritoryDescription\":\"Neward                                            \",\"RegionID\":1}]";

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from emp in context.Employees
                        .Include(e => e.Territories)
                    where emp.EmployeeID == 1
                    select emp, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void CascadedOneToOneInclude()
        {
            string expected = "[{\"OrderID\":10248,\"ProductID\":11,\"UnitPrice\":14.0,\"Quantity\":12,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID\":\"VINET\",\"EmployeeID\":5,\"OrderDate\":\"1996-07-04T00:00:00\",\"RequiredDate\":\"1996-08-01T00:00:00\",\"ShippedDate\":\"1996-07-16T00:00:00\",\"ShipVia\":3,\"Freight\":32.38,\"ShipName\":\"Vins et alcools Chevalier\",\"ShipAddress\":\"59 rue de l'Abbaye\",\"ShipCity\":\"Reims\",\"ShipRegion\":null,\"ShipPostalCode\":\"51100\",\"ShipCountry\":\"France\",\"CustomerID1\":\"VINET\",\"CompanyName\":\"Vins et alcools Chevalier\",\"ContactName\":\"Paul Henriot\",\"ContactTitle\":\"Accounting Manager\",\"Address\":\"59 rue de l'Abbaye\",\"City\":\"Reims\",\"Region\":null,\"PostalCode\":\"51100\",\"Country\":\"France\",\"Phone\":\"26.47.15.10\",\"Fax\":\"26.47.15.11\"},{\"OrderID\":10248,\"ProductID\":42,\"UnitPrice\":9.8,\"Quantity\":10,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID1\":\"VINET\"},{\"OrderID\":10248,\"ProductID\":72,\"UnitPrice\":34.8,\"Quantity\":5,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID1\":\"VINET\"}]"; 

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from orderDetail in context.OrderDetails
                        .Include(o => o.Order.Customer)
                    where orderDetail.OrderID == 10248
                    select orderDetail, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void MixedCascadedOneToOneInclude()
        {
            string expected = "[{\"OrderID\":10248,\"ProductID\":11,\"UnitPrice\":14.0,\"Quantity\":12,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID\":\"VINET\",\"EmployeeID\":5,\"OrderDate\":\"1996-07-04T00:00:00\",\"RequiredDate\":\"1996-08-01T00:00:00\",\"ShippedDate\":\"1996-07-16T00:00:00\",\"ShipVia\":3,\"Freight\":32.38,\"ShipName\":\"Vins et alcools Chevalier\",\"ShipAddress\":\"59 rue de l'Abbaye\",\"ShipCity\":\"Reims\",\"ShipRegion\":null,\"ShipPostalCode\":\"51100\",\"ShipCountry\":\"France\",\"CustomerID1\":\"VINET\",\"CompanyName\":\"Vins et alcools Chevalier\",\"ContactName\":\"Paul Henriot\",\"ContactTitle\":\"Accounting Manager\",\"Address\":\"59 rue de l'Abbaye\",\"City\":\"Reims\",\"Region\":null,\"PostalCode\":\"51100\",\"Country\":\"France\",\"Phone\":\"26.47.15.10\",\"Fax\":\"26.47.15.11\"},{\"OrderID\":10248,\"ProductID\":42,\"UnitPrice\":9.8,\"Quantity\":10,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID1\":\"VINET\"},{\"OrderID\":10248,\"ProductID\":72,\"UnitPrice\":34.8,\"Quantity\":5,\"Discount\":0.0,\"OrderID1\":10248,\"CustomerID1\":\"VINET\"}]";     

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from orderDetail in context.OrderDetails
                        .Include(o => o.Order)
                        .Include(o => o.Order.Customer)
                    where orderDetail.OrderID == 10248
                    select orderDetail, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void CascadedOneToManyInclude()
        {
            string expected = "[{\"CustomerID\":\"ALFKI\",\"CompanyName\":\"Alfreds Futterkiste\",\"ContactName\":\"Maria Anders\",\"ContactTitle\":\"Sales Representative\",\"Address\":\"Obere Str. 57\",\"City\":\"Berlin\",\"Region\":null,\"PostalCode\":\"12209\",\"Country\":\"Germany\",\"Phone\":\"030-0074321\",\"Fax\":\"030-0076545\",\"C2\":1,\"OrderID\":10643,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":6,\"OrderDate\":\"1997-08-25T00:00:00\",\"RequiredDate\":\"1997-09-22T00:00:00\",\"ShippedDate\":\"1997-09-02T00:00:00\",\"ShipVia\":1,\"Freight\":29.46,\"ShipName\":\"Alfreds Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":28,\"OrderID1\":10643,\"UnitPrice\":45.6,\"Quantity\":15,\"Discount\":0.25},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10643,\"C3\":1,\"ProductID\":39,\"OrderID1\":10643,\"UnitPrice\":18.0,\"Quantity\":21,\"Discount\":0.25},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10643,\"C3\":1,\"ProductID\":46,\"OrderID1\":10643,\"UnitPrice\":12.0,\"Quantity\":2,\"Discount\":0.25},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10692,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":4,\"OrderDate\":\"1997-10-03T00:00:00\",\"RequiredDate\":\"1997-10-31T00:00:00\",\"ShippedDate\":\"1997-10-13T00:00:00\",\"ShipVia\":2,\"Freight\":61.02,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":63,\"OrderID1\":10692,\"UnitPrice\":43.9,\"Quantity\":20,\"Discount\":0.0},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10702,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":4,\"OrderDate\":\"1997-10-13T00:00:00\",\"RequiredDate\":\"1997-11-24T00:00:00\",\"ShippedDate\":\"1997-10-21T00:00:00\",\"ShipVia\":1,\"Freight\":23.94,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":3,\"OrderID1\":10702,\"UnitPrice\":10.0,\"Quantity\":6,\"Discount\":0.0},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10702,\"C3\":1,\"ProductID\":76,\"OrderID1\":10702,\"UnitPrice\":18.0,\"Quantity\":15,\"Discount\":0.0},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10835,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":1,\"OrderDate\":\"1998-01-15T00:00:00\",\"RequiredDate\":\"1998-02-12T00:00:00\",\"ShippedDate\":\"1998-01-21T00:00:00\",\"ShipVia\":3,\"Freight\":69.53,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":59,\"OrderID1\":10835,\"UnitPrice\":55.0,\"Quantity\":15,\"Discount\":0.0},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10835,\"C3\":1,\"ProductID\":77,\"OrderID1\":10835,\"UnitPrice\":13.0,\"Quantity\":2,\"Discount\":0.2},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10952,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":1,\"OrderDate\":\"1998-03-16T00:00:00\",\"RequiredDate\":\"1998-04-27T00:00:00\",\"ShippedDate\":\"1998-03-24T00:00:00\",\"ShipVia\":1,\"Freight\":40.42,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":6,\"OrderID1\":10952,\"UnitPrice\":25.0,\"Quantity\":16,\"Discount\":0.05},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":10952,\"C3\":1,\"ProductID\":28,\"OrderID1\":10952,\"UnitPrice\":45.6,\"Quantity\":2,\"Discount\":0.0},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":11011,\"CustomerID1\":\"ALFKI\",\"EmployeeID\":3,\"OrderDate\":\"1998-04-09T00:00:00\",\"RequiredDate\":\"1998-05-07T00:00:00\",\"ShippedDate\":\"1998-04-13T00:00:00\",\"ShipVia\":1,\"Freight\":1.21,\"ShipName\":\"Alfred's Futterkiste\",\"ShipAddress\":\"Obere Str. 57\",\"ShipCity\":\"Berlin\",\"ShipRegion\":null,\"ShipPostalCode\":\"12209\",\"ShipCountry\":\"Germany\",\"C3\":1,\"ProductID\":58,\"OrderID1\":11011,\"UnitPrice\":13.25,\"Quantity\":40,\"Discount\":0.05},{\"CustomerID\":\"ALFKI\",\"C2\":1,\"OrderID\":11011,\"C3\":1,\"ProductID\":71,\"OrderID1\":11011,\"UnitPrice\":21.5,\"Quantity\":20,\"Discount\":0.0}]";
  
            ICorrectness result = this.tester.TestQuery(
                context =>
                    from cus in context.Customers
                        .Include(c => c.Orders.Select(o => o.OrderDetails))
                    where cus.CustomerID == "ALFKI"
                    select cus, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void CombinedInclude()
        {
            string expected = "[{\"C2\":\"ALFKI\",\"C3\":\"Alfreds Futterkiste\",\"C4\":\"Maria Anders\",\"C5\":\"Sales Representative\",\"C6\":\"Obere Str. 57\",\"C7\":\"Berlin\",\"C8\":null,\"C9\":\"12209\",\"C10\":\"Germany\",\"C11\":\"030-0074321\",\"C12\":\"030-0076545\",\"C13\":1,\"C14\":10643,\"C15\":\"ALFKI\",\"C16\":6,\"C17\":\"1997-08-25T00:00:00\",\"C18\":\"1997-09-22T00:00:00\",\"C19\":\"1997-09-02T00:00:00\",\"C20\":1,\"C21\":29.46,\"C22\":\"Alfreds Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10692,\"C15\":\"ALFKI\",\"C16\":4,\"C17\":\"1997-10-03T00:00:00\",\"C18\":\"1997-10-31T00:00:00\",\"C19\":\"1997-10-13T00:00:00\",\"C20\":2,\"C21\":61.02,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10702,\"C15\":\"ALFKI\",\"C16\":4,\"C17\":\"1997-10-13T00:00:00\",\"C18\":\"1997-11-24T00:00:00\",\"C19\":\"1997-10-21T00:00:00\",\"C20\":1,\"C21\":23.94,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10835,\"C15\":\"ALFKI\",\"C16\":1,\"C17\":\"1998-01-15T00:00:00\",\"C18\":\"1998-02-12T00:00:00\",\"C19\":\"1998-01-21T00:00:00\",\"C20\":3,\"C21\":69.53,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10952,\"C15\":\"ALFKI\",\"C16\":1,\"C17\":\"1998-03-16T00:00:00\",\"C18\":\"1998-04-27T00:00:00\",\"C19\":\"1998-03-24T00:00:00\",\"C20\":1,\"C21\":40.42,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":11011,\"C15\":\"ALFKI\",\"C16\":3,\"C17\":\"1998-04-09T00:00:00\",\"C18\":\"1998-05-07T00:00:00\",\"C19\":\"1998-04-13T00:00:00\",\"C20\":1,\"C21\":1.21,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"}]";

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from cus in context.Customers
                        .Include(c => c.Orders)
                        .Include(c => c.CustomerDemographics)
                    where cus.CustomerID == "ALFKI"
                    select cus, 
                expected);

            Assert.IsTrue(result.Check());
        }

        [Test]
        public void NestedInclude()
        {
            string expected = "[{\"C2\":\"ALFKI\",\"C3\":\"Alfreds Futterkiste\",\"C4\":\"Maria Anders\",\"C5\":\"Sales Representative\",\"C6\":\"Obere Str. 57\",\"C7\":\"Berlin\",\"C8\":null,\"C9\":\"12209\",\"C10\":\"Germany\",\"C11\":\"030-0074321\",\"C12\":\"030-0076545\",\"C13\":1,\"C14\":10643,\"C15\":\"ALFKI\",\"C16\":6,\"C17\":\"1997-08-25T00:00:00\",\"C18\":\"1997-09-22T00:00:00\",\"C19\":\"1997-09-02T00:00:00\",\"C20\":1,\"C21\":29.46,\"C22\":\"Alfreds Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10692,\"C15\":\"ALFKI\",\"C16\":4,\"C17\":\"1997-10-03T00:00:00\",\"C18\":\"1997-10-31T00:00:00\",\"C19\":\"1997-10-13T00:00:00\",\"C20\":2,\"C21\":61.02,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10702,\"C15\":\"ALFKI\",\"C16\":4,\"C17\":\"1997-10-13T00:00:00\",\"C18\":\"1997-11-24T00:00:00\",\"C19\":\"1997-10-21T00:00:00\",\"C20\":1,\"C21\":23.94,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10835,\"C15\":\"ALFKI\",\"C16\":1,\"C17\":\"1998-01-15T00:00:00\",\"C18\":\"1998-02-12T00:00:00\",\"C19\":\"1998-01-21T00:00:00\",\"C20\":3,\"C21\":69.53,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":10952,\"C15\":\"ALFKI\",\"C16\":1,\"C17\":\"1998-03-16T00:00:00\",\"C18\":\"1998-04-27T00:00:00\",\"C19\":\"1998-03-24T00:00:00\",\"C20\":1,\"C21\":40.42,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"},{\"C2\":\"ALFKI\",\"C13\":1,\"C14\":11011,\"C15\":\"ALFKI\",\"C16\":3,\"C17\":\"1998-04-09T00:00:00\",\"C18\":\"1998-05-07T00:00:00\",\"C19\":\"1998-04-13T00:00:00\",\"C20\":1,\"C21\":1.21,\"C22\":\"Alfred's Futterkiste\",\"C23\":\"Obere Str. 57\",\"C24\":\"Berlin\",\"C25\":null,\"C26\":\"12209\",\"C27\":\"Germany\"}]";

            ICorrectness result = this.tester.TestQuery(
                context =>
                    from
                        cus in context.Customers
                    where cus.CustomerID == "ALFKI"
                    select new
                    {
                        Customer = cus,
                        Orders = cus.Orders,
                        Demographics = cus.CustomerDemographics
                    }, 
                expected);

            Assert.IsTrue(result.Check());
        }
    }
}
